ЗагрузитьФайл (БСП)

Автор: 1С
ОбщийМодуль.ФайлыОбластейДанных
1С БСП

Загрузить файл. Сохраняет данные как запись о файле в регистре сведений ФайлыОбластейДанных.

// Сохраняет данные как запись о файле в регистре сведений ФайлыОбластейДанных.
// Если параметр Данные = Неопределено, должен быть заполнен параметр ПолноеИмя = полное имя файла с путем.
//
// Параметры:
//  Имя - Строка - Имя файла в хранилище.
//  Данные - ДвоичныеДанные, Неопределено - данные файла.
//  ПолноеИмя - Строка, Неопределено - полное имя файла с путем, если Данные = Неопределено.
//  Временный - Булево
//
// Возвращаемое значение:
//  УникальныйИдентификатор - Идентификатор файла.
//
Функция ЗагрузитьФайл(Знач Имя, Данные = Неопределено, ПолноеИмя = Неопределено, 
    Временный = Ложь, 
    УстановитьВременныйПриПолучении = Ложь) Экспорт
    
    Словарь = ФайлыОбластейДанныхСловарь;
	Если Не ЗначениеЗаполнено(Имя) Тогда
		Если ЗначениеЗаполнено(ПолноеИмя) Тогда
			СвойстваФайла = Новый Файл(ПолноеИмя);
			Имя = СвойстваФайла.Имя;
		Иначе
			ВызватьИсключение Словарь.ИмяФайлаДляСохраненияНеЗадано();
		КонецЕсли;
	КонецЕсли;
	Если НЕ ЗначениеЗаполнено(Данные) И Не ЗначениеЗаполнено(ПолноеИмя) Тогда
		ВызватьИсключение Словарь.ИнформацияОФайлеОтсутствует();
	КонецЕсли;
	СвойстваФайла = Новый Файл(Имя);
	Запись = РегистрыСведений.ФайлыОбластейДанных.СоздатьМенеджерЗаписи();
	Запись.Идентификатор = Новый УникальныйИдентификатор;
	Запись.Имя = СвойстваФайла.Имя;
    Запись.Временный = Временный;
    Запись.УстановитьВременныйПриПолучении = УстановитьВременныйПриПолучении;
	Запись.ХранитьНаДиске = РаботаСФайламиСлужебный.ТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
	Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
		Запись.Размер = Данные.Размер();
		ДобавляемыеДанные = Данные;
	Иначе // Иначе это должен быть путь к файлу на диске.
		СохраняемыйФайл = Новый Файл(ПолноеИмя);
		Если НЕ СохраняемыйФайл.Существует() Или Не СохраняемыйФайл.ЭтоФайл() Тогда 
			ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
                Словарь.ФайлНеНайденПоПолномуИмени(), СохраняемыйФайл.ПолноеИмя);
		КонецЕсли;
		Запись.Размер = СохраняемыйФайл.Размер();
		Если Запись.ХранитьНаДиске Тогда
			ДобавляемыеДанные = СохраняемыйФайл.ПолноеИмя;
		Иначе
			ДобавляемыеДанные = Новый ДвоичныеДанные(СохраняемыйФайл.ПолноеИмя);
		КонецЕсли;
    КонецЕсли;
    Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32);
    Если ТипЗнч(ДобавляемыеДанные) = Тип("ДвоичныеДанные") Тогда
        Хеширование.Добавить(ДобавляемыеДанные);
    Иначе
        Хеширование.ДобавитьФайл(ДобавляемыеДанные);
    КонецЕсли; 
    Запись.ФайлCRC32 = Хеширование.ХешСумма;
	Если Запись.ХранитьНаДиске Тогда
		// Добавить в один из томов, где есть свободное место
        ПутьКФайлу = "";
	    СсылкаНаТом = Неопределено;
        ДатаПоследнегоИзменения = ТекущаяУниверсальнаяДата();
        СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДобавляемыеДанные, ДатаПоследнегоИзменения,
			СвойстваФайла.ИмяБезРасширения,	ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СвойстваФайла.Расширение)); 
	    Запись.ТомНаДиске = СведенияОФайле.Том;
        Запись.ПутьКФайлу = СведенияОФайле.ПутьКФайлу;
	Иначе
		Запись.Файл = Новый ХранилищеЗначения(ДобавляемыеДанные, Новый СжатиеДанных(9));
	КонецЕсли;
	УстановитьПривилегированныйРежим(Истина);
	Запись.Записать();
	УстановитьПривилегированныйРежим(Ложь);
	Возврат Запись.Идентификатор;
	
КонецФункции

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ЗагрузитьИзФайла (БСП)

ЗагрузитьКомпонентуИзФайла (БСП)

ЗагрузитьЧастьФайла (БСП)

ЗагрузитьФайлИсправления (БСП)

ЗагрузитьФайлОценкиПроизводительности (БСП)

ЗагрузитьФайл (БСП)

ЗагрузитьФайлы (БСП)

ЗагрузитьКомпонентуИзФайлаПослеЗагрузкиКомпоненты (БСП)

1С Менеджер конфигураций