|
Скачать изображение во временное хранилище | ☑ | ||
---|---|---|---|---|
0
Pyryrym
17.08.20
✎
14:47
|
Мне необходимо, зная адрес изображения, поместить его во временное хранилище. Я собираюсь сделать это с помощью кода:
Соединение = Новый HTTPСоединение(АдресСервера); Запрос = Новый HTTPЗапрос(АдресКартинки); Ответ = Соединение.Получить(Запрос); ДвоичныеДанныеКартинки = Ответ.ПолучитьТелоКакДвоичныеДанные(); Но я не совсем понимаю, как можно получить адрес сервера. И в принципе, оптимальный ли я выбрал способ загрузки изображений |
|||
1
Velis
17.08.20
✎
16:31
|
Адрес сервера это название сайта. Если адрес изображения полный, то можно адрес сервера достать из строки.
Например в example.com/example.jpg example.com - адрес сервера |
|||
2
Pyryrym
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? |
|||
3
Pyryrym
18.08.20
✎
17:08
|
ой, не "http://www.primer.com" а "http://www.primer.com"
|
|||
4
Kassern
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",ТекстЗапроса,ИмяФайла); //В итоге вы получите временный файл с картинкой. А дальше можете ее в двоичные данные переводить, или переместить в нужную папку и т.д. |
|||
5
Pyryrym
18.08.20
✎
18:07
|
Попробовал так:
Протокол = ПолучитьПротокол(Строка.Изображение); Если Протокол = "https" Тогда ИмяФайла= ПолучитьИмяВременногоФайла("jpg"); ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено); Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl,); ТекстЗапроса = Новый HTTPЗапрос(АдресКартинки);//здесь вторым параметром можно указать заголовки, если они необходимы Ответ=Соединение.ВызватьHTTPМетод("GET",ТекстЗапроса,ИмяФайла); //Тут ошибка КонецЕсли; Ответ=Соединение.ВызватьHTTPМетод("GET",ТекстЗапроса,ИмяФайла); по причине: Ошибка работы с Интернет: Couldn't resolve host name |
|||
6
Pyryrym
18.08.20
✎
18:54
|
(4) вот новый код
Если Протокол = "https" Тогда ИмяФайла= ПолучитьИмяВременногоФайла("jpg"); ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено); Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl,); ТекстЗапроса = Новый HTTPЗапрос(АдресКартинки);//здесь вторым параметром можно указать заголовки, если они необходимы Ответ = Соединение.ВызватьHTTPМетод("GET", ТекстЗапроса).ПолучитьТелоКакДвоичныеДанные(); //тут двоичные данные КонецЕсли; АдресВХранилище = ПоместитьВоВременноеХранилище(Ответ); //тут адрес СтруктураИмениФайла = ПолучитьСтруктуруИмениФайла(Строка.Изображение); СсылкаНаФайл = ПрикрепитьФайлКОбъектуНаСервере(АдресВХранилище, СтруктураИмениФайла, СсылкаНаОбъект); // но при вызове функции, файл не записывается т.к. у него размер 0 УстановитьИзображение(СсылкаНаФайл, Строка.Наименование); |
|||
7
Pyryrym
18.08.20
✎
19:06
|
Если использовать такой код
Если Протокол = "https" Тогда ИмяФайла= ПолучитьИмяВременногоФайла("jpg"); ssl = Новый ЗащищенноеСоединениеOpenSSL(неопределено, неопределено); Соединение = Новый HTTPСоединение(АдресСервера,,,,,,ssl,); ТекстЗапроса = Новый HTTPЗапрос(АдресКартинки);//здесь вторым параметром можно указать заголовки, если они необходимы Ответ = Соединение.ВызватьHTTPМетод("GET", ТекстЗапроса, ИмяФайла); КонецЕсли; АдресВХранилище = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяФайла)); СтруктураИмениФайла = ПолучитьСтруктуруИмениФайла(Строка.Изображение); СсылкаНаФайл = ПрикрепитьФайлКОбъектуНаСервере(АдресВХранилище, СтруктураИмениФайла, СсылкаНаОбъект); УстановитьИзображение(СсылкаНаФайл, Строка.Наименование); То имя файла указывает адрес на моем пк, АдресВХранилище - адрес во ВХ, однако при попытке добавить файл пишет "Каталог не обнаружен" |
|||
8
Kassern
19.08.20
✎
11:16
|
(7) по имени файла в отладке проверьте, что картинка корректно записалась. Если это так, то далее смотрите функции по записи картинки в нужное вам место из локального каталога. так же нужно понимать, где вызывается функция загрузки фото. Если на клиенте, то и временный файл будет создан на клиенте. Если вы потом этот файл без доп действий захотите открыть на сервере, который находится на другом компьютере, от кончено, сервер не сможет его открыть, так, как на сервере этого файла по данному пути нет.
|
|||
9
Pyryrym
19.08.20
✎
17:46
|
(8) Я решил все намного проще
ИмяФайла = ПолучитьИмяВременногоФайла("jpg"); КопироватьФайл(Строка.Изображение, ИмяФайла); ДвоичныеДанныеКартинки = Новый ДвоичныеДанные(ИмяФайла); Чисто "а так можно было", спасибо за помощь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |