Загрузка картинок из интернета

1. 20.11.20 21:58 Сейчас в теме
Коллеги, доброго дня. Сделал обработку, которая заполняет номенклатуру по табличному документу. В строку табличного документа так же входит ссылка на его изображение (Пример: https://instrument.ru/wa-data/public/shop/products/68/14/31468/images/47797/47797.750x0.jpg)

Конфигурация: УНФ (одна из последних).

есть процедура, которая должна добавить это изображение к номенклатуре. (код брал в интернете, немного менял под себя):

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


По итогу: код проходит. Файл создается и присоединяется в карточку номенклатуры. Но скорей всего есть проблема в самом изображении, поэтому встречаю ошибки (присоединяю файлы - картинки с ошибками в архиве).

В чем может быть ошибка, как можно исправить?

И второй момент, сейчас создается файл временный я так понимаю и само изображение будет храниться в базе. Насколько это опасно, учитывая, что работаем в файловой базе. Какой вариант решения, чтобы база не лопнула, помимо перехода в серверный режим работы (он планируется, но позже)

Заранее большое спасибо!
Ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
4. uno-c 164 23.11.20 12:37 Сейчас в теме
(1)
В чем может быть ошибка, как можно исправить?
Посмотрите URLы тех картинок, которые с ошибками присоединяются. Может расширение другое не jpg, а может и сама картинка по этому URLу испорченная.
В УНФ - смотрите настройки для хранения присоединенных файлов в томах на диске - отдельно от базы. В базе, тем более файловой - конечно лучше не хранить. И в конфигурации есть готовые экспортные процедуры, которые автоматом поймут настройки томов и сохранят как надо присоединенный файл. См. например в общем модуле РаботаСФайлами Функция ДобавитьФайлСДиска(ВладелецФайлов, ПутьКФайлуНаДиске) Экспорт
2. VladimirB 10 21.11.20 11:03 Сейчас в теме
(1) Храни в базе только имя файла. А саму картинку на диске. Иначе от большого количества картинок база будет быстро распухать
3. ipoloskov 130 22.11.20 23:56 Сейчас в теме
В УНФ должна быть возможность хранения файлов в томах на дисках.
Оставьте свое сообщение
Вопросы с вознаграждением