Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Скачать изображение во временное хранилище

Скачать изображение во временное хранилище
Я
   Pyryrym
 
17.08.20 - 14:47
Мне необходимо, зная адрес изображения, поместить его во временное хранилище. Я собираюсь сделать это с помощью кода:

    Соединение = Новый HTTPСоединение(АдресСервера);
    Запрос = Новый HTTPЗапрос(АдресКартинки);
    Ответ = Соединение.Получить(Запрос);
    ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные();


Но я не совсем понимаю, как можно получить адрес сервера. И в принципе, оптимальный ли я выбрал способ загрузки изображений
   Velis
 
1 - 17.08.20 - 16:31
Адрес сервера это название сайта. Если адрес изображения полный, то можно адрес сервера достать из строки.
Например в example.com/example.jpg example.com - адрес сервера
   Pyryrym
 
2 - 18.08.20 - 17:07
(1) У меня есть несколько ссылок вида

https://site.ru/picture
http://adress.com/photo
https://www.primer.com/123

Откуда я хочу скачать картинки c помощью кода
    
    Соединение = Новый HTTPСоединение(АдресСервера);
    Запрос = Новый HTTPЗапрос(АдресКартинки);
    Ответ = Соединение.Получить(Запрос);
    ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные();

Если я беру адреса сервера "site.ru" "adress.com" "http://www.primer.com"; то никаких ошибок не выскакивает, но файл с последнего сайта не открывается и картинка не отображается (похоже, формат этого файла не поддерживается), если взять адрес без www - "primer.com", то при выполнении выскакивает ошибка

Ошибка при вызове метода контекста (Получить)
        Ответ = Соединение.Получить(Запрос);
по причине:
Ошибка работы с Интернет:   Не могу установить соединение.

Если коротко - то что является адресом сервера в https://www.rom.com/dasdkasjdlklashj?
   Pyryrym
 
3 - 18.08.20 - 17:08
   Kassern
 
4 - 18.08.20 - 17:37
Во первых, вы должны понимать какой протокол используется на сайте, http илил https. остюда будет зависеть, будете ли вы подставлять параметр ssl или нет (Соединение = Новый HTTPСоединение("Нужный сайт",,,,,,ssl,);). Далее нужно знать, как получать картинки, использую GET или POST запрос. Это зависит от документации и способа обмена с сайтом. Скорее всего у вас обычный GET запрос. В адрес сайта пишите "http://www.НужныйСайт.ru";, в запрос пишите текст после сайта. например "pictures/simple/600x400.jpg". Лучше всего использовать следующий код, если сайт с ssl:
(пример ссылки на фото "https://www.НужныйСайт.ru/pictures/simple/600x400.jpg";)
ИмяФайла=ПолучитьИмяВременногоФайла("jpg");
ssl = Новый ЗащищенноеСоединениеOpenSSL( неопределено, неопределено );
Соединение = Новый HTTPСоединение("http://www.НужныйСайт.ru",,,,,,ssl,);
ТекстЗапроса = Новый HTTPЗапрос("pictures/simple/600x400.jpg");//здесь вторым параметром можно указать заголовки, если они необходимы

Ответ=Соединение.ВызватьHTTPМетод("GET",ТекстЗапроса,ИмяФайла);
//В итоге вы получите временный файл с картинкой. А дальше можете ее в двоичные данные переводить, или переместить в нужную папку и т.д.
   Pyryrym
 
5 - 18.08.20 - 18:07
Попробовал так:


Протокол = ПолучитьПротокол(Строка.Изображение);
    
    Если Протокол = "https" Тогда
        ИмяФайла= ПолучитьИмяВременногоФайла("jpg");
        ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено);
        Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl,);
        ТекстЗапроса = Новый HTTPЗапрос(АдресКартинки)//здесь вторым параметром можно указать заголовки, если они необходимы

    
        Ответ=Соединение.ВызватьHTTPМетод("GET",ТекстЗапроса,ИмяФайла);            //Тут ошибка

    КонецЕсли;


Ответ=Соединение.ВызватьHTTPМетод("GET",ТекстЗапроса,ИмяФайла);
по причине:
Ошибка работы с Интернет:   Couldn't resolve host name
   Pyryrym
 
6 - 18.08.20 - 18:54
(4) вот новый код

     
    Если Протокол = "https" Тогда
        ИмяФайла= ПолучитьИмяВременногоФайла("jpg");
        ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено);
        Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl,);
        ТекстЗапроса = Новый HTTPЗапрос(АдресКартинки)//здесь вторым параметром можно указать заголовки, если они необходимы

    
        Ответ = Соединение.ВызватьHTTPМетод("GET", ТекстЗапроса).ПолучитьТелоКакДвоичныеДанные();  //тут двоичные данные

    КонецЕсли;
    
    АдресВХранилище = ПоместитьВоВременноеХранилище(Ответ);  //тут адрес      

        
    СтруктураИмениФайла = ПолучитьСтруктуруИмениФайла(Строка.Изображение);
    
    СсылкаНаФайл = ПрикрепитьФайлКОбъектуНаСервере(АдресВХранилище, СтруктураИмениФайла, СсылкаНаОбъект);// но при вызове функции, файл не записывается т.к. у него размер 0

    УстановитьИзображение(СсылкаНаФайл, Строка.Наименование);
   Pyryrym
 
7 - 18.08.20 - 19:06
Если использовать такой код

        Если Протокол = "https" Тогда
        ИмяФайла= ПолучитьИмяВременногоФайла("jpg");
        ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено);
        Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl,);
        ТекстЗапроса = Новый HTTPЗапрос(АдресКартинки)//здесь вторым параметром можно указать заголовки, если они необходимы

    
        Ответ = Соединение.ВызватьHTTPМетод("GET", ТекстЗапроса, ИмяФайла);
    КонецЕсли;
    
    АдресВХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла));
        
    СтруктураИмениФайла = ПолучитьСтруктуруИмениФайла(Строка.Изображение);
    
    СсылкаНаФайл = ПрикрепитьФайлКОбъектуНаСервере(АдресВХранилище, СтруктураИмениФайла, СсылкаНаОбъект);
    УстановитьИзображение(СсылкаНаФайл, Строка.Наименование);



То имя файла указывает адрес на моем пк, АдресВХранилище - адрес во ВХ, однако при попытке добавить файл пишет "Каталог не обнаружен"
   Kassern
 
8 - 19.08.20 - 11:16
(7) по имени файла в отладке проверьте, что картинка корректно записалась. Если это так, то далее смотрите функции по записи картинки в нужное вам место из локального каталога. так же нужно понимать, где вызывается функция загрузки фото. Если на клиенте, то и временный файл будет создан на клиенте. Если вы потом этот файл без доп действий захотите открыть на сервере, который находится на другом компьютере, от кончено, сервер не сможет его открыть, так, как на сервере этого файла по данному пути нет.
   Pyryrym
 
9 - 19.08.20 - 17:46
(8) Я решил все намного проще
        ИмяФайла = ПолучитьИмяВременногоФайла("jpg");
        
    КопироватьФайл(Строка.Изображение, ИмяФайла);
        ДвоичныеДанныеКартинки = Новый ДвоичныеДанные(ИмяФайла);

Чисто "а так можно было",  спасибо за помощь

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.