Загрузить файл. Сохраняет данные как запись о файле в регистре сведений ФайлыОбластейДанных.
// Сохраняет данные как запись о файле в регистре сведений ФайлыОбластейДанных.
// Если параметр Данные = Неопределено, должен быть заполнен параметр ПолноеИмя = полное имя файла с путем.
//
// Параметры:
// Имя - Строка - Имя файла в хранилище.
// Данные - ДвоичныеДанные, Неопределено - данные файла.
// ПолноеИмя - Строка, Неопределено - полное имя файла с путем, если Данные = Неопределено.
// Временный - Булево
//
// Возвращаемое значение:
// УникальныйИдентификатор - Идентификатор файла.
//
Функция ЗагрузитьФайл(Знач Имя, Данные = Неопределено, ПолноеИмя = Неопределено,
Временный = Ложь,
УстановитьВременныйПриПолучении = Ложь) Экспорт
Словарь = ФайлыОбластейДанныхСловарь;
Если Не ЗначениеЗаполнено(Имя) Тогда
Если ЗначениеЗаполнено(ПолноеИмя) Тогда
СвойстваФайла = Новый Файл(ПолноеИмя);
Имя = СвойстваФайла.Имя;
Иначе
ВызватьИсключение Словарь.ИмяФайлаДляСохраненияНеЗадано();
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Данные) И Не ЗначениеЗаполнено(ПолноеИмя) Тогда
ВызватьИсключение Словарь.ИнформацияОФайлеОтсутствует();
КонецЕсли;
СвойстваФайла = Новый Файл(Имя);
Запись = РегистрыСведений.ФайлыОбластейДанных.СоздатьМенеджерЗаписи();
Запись.Идентификатор = Новый УникальныйИдентификатор;
Запись.Имя = СвойстваФайла.Имя;
Запись.Временный = Временный;
Запись.УстановитьВременныйПриПолучении = УстановитьВременныйПриПолучении;
Запись.ХранитьНаДиске = РаботаСФайламиСлужебный.ТипХраненияФайлов() = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске;
Если ТипЗнч(Данные) = Тип("ДвоичныеДанные") Тогда
Запись.Размер = Данные.Размер();
ДобавляемыеДанные = Данные;
Иначе // Иначе это должен быть путь к файлу на диске.
СохраняемыйФайл = Новый Файл(ПолноеИмя);
Если НЕ СохраняемыйФайл.Существует() Или Не СохраняемыйФайл.ЭтоФайл() Тогда
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Словарь.ФайлНеНайденПоПолномуИмени(), СохраняемыйФайл.ПолноеИмя);
КонецЕсли;
Запись.Размер = СохраняемыйФайл.Размер();
Если Запись.ХранитьНаДиске Тогда
ДобавляемыеДанные = СохраняемыйФайл.ПолноеИмя;
Иначе
ДобавляемыеДанные = Новый ДвоичныеДанные(СохраняемыйФайл.ПолноеИмя);
КонецЕсли;
КонецЕсли;
Хеширование = Новый ХешированиеДанных(ХешФункция.CRC32);
Если ТипЗнч(ДобавляемыеДанные) = Тип("ДвоичныеДанные") Тогда
Хеширование.Добавить(ДобавляемыеДанные);
Иначе
Хеширование.ДобавитьФайл(ДобавляемыеДанные);
КонецЕсли;
Запись.ФайлCRC32 = Хеширование.ХешСумма;
Если Запись.ХранитьНаДиске Тогда
// Добавить в один из томов, где есть свободное место
ПутьКФайлу = "";
СсылкаНаТом = Неопределено;
ДатаПоследнегоИзменения = ТекущаяУниверсальнаяДата();
СведенияОФайле = РаботаСФайламиСлужебный.ДобавитьФайлВТом(ДобавляемыеДанные, ДатаПоследнегоИзменения,
СвойстваФайла.ИмяБезРасширения, ОбщегоНазначенияКлиентСервер.РасширениеБезТочки(СвойстваФайла.Расширение));
Запись.ТомНаДиске = СведенияОФайле.Том;
Запись.ПутьКФайлу = СведенияОФайле.ПутьКФайлу;
Иначе
Запись.Файл = Новый ХранилищеЗначения(ДобавляемыеДанные, Новый СжатиеДанных(9));
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Запись.Записать();
УстановитьПривилегированныйРежим(Ложь);
Возврат Запись.Идентификатор;
КонецФункции
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ЗагрузитьКомпонентуИзФайла (БСП)
ЗагрузитьФайлИсправления (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)