Как скачать файл из интернета при помощи 1С?
Для этой цели, нам подойдёт функция КопироватьФайл(<ИмяФайлаИсточника>, <ИмяФайлаПриемника>)
Обратите внимание:
Файл-приемник при создании будет иметь права доступа, аналогичные назначаемым при создании новых файлов (т.е. права доступа к файлу-источнику не копируются).Допускается использование схем http, https и ftp для адресации файлов.
При использовании этих схем в адресах необходимо указывать прямые слеши ‘/’, а не обратные ‘\’.Для работы метода на веб-клиенте необходимо предварительно подключить расширение работы с файлами.
На веб-клиенте, метод работает только с локальными файлами.
Скачать файлы с интернета (более продвинутая функция).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
&НаСервере Процедура Пример() ИмяФайла = ПолучитьФайлССервера("Ссылка на файл.zip "); КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ИмяФайла, Соединение, Заголовки, флаг = Истина) HTTPЗапрос = Новый HTTPЗапрос(ПутьКФайлуНаСервере, Заголовки); HTTPЗапрос.Заголовки.Вставить("Accept-Charset", "utf-8"); HTTPОтвет = Соединение.Получить(HTTPЗапрос, ИмяФайла); Если HTTPОтвет.КодСостояния = 301 или HTTPОтвет.КодСостояния = 302 Тогда ПутьКФайлуНаСервере = HTTPОтвет.Заголовки["Location"]; URLРазделенный = РазделитьURL(ПутьКФайлуНаСервере); ПутьКФайлуНаСервере = URLРазделенный.ПутьКФайлуНаСервере; HTTPОтвет = ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ИмяФайла, Соединение, Заголовки, Флаг); КонецЕсли; файл = Новый Файл(ИмяФайла); Если флаг и HTTPОтвет.КодСостояния >= 200 и HTTPОтвет.КодСостояния <= 299 Тогда флаг = Ложь; ИмяФайлаВр = ПутьКФайлуНаСервере; Пока Найти(ИмяФайлаВр,"/") > 0 цикл ИмяФайлаВр = Сред(ИмяФайлаВр,Найти(ИмяФайлаВр,"/")+1); КонецЦикла; Если НЕ ПустаяСтрока(ИмяФайлаВр) Тогда ПереместитьФайл(ИмяФайла, файл.Путь + ИмяФайлаВр); ИмяФайла = файл.Путь + ИмяФайлаВр; КонецЕсли; КонецЕсли; Возврат HTTPОтвет; КонецФункции &НаСервереБезКонтекста Функция ПолучитьФайлССервера(ФайлНаВебСервере) ВремКаталог = ПолучитьИмяВременногоФайла(); СоздатьКаталог(ВремКаталог); ПараметрыПолученияФайлов = Новый Структура; ПараметрыПолучения = Новый Структура("ИмяФайла"); ПараметрыПолучения. Вставить("ИмяФайла", ВремКаталог); URLРазделенный = РазделитьURL(ФайлНаВебСервере); ИмяСервера = URLРазделенный.ИмяСервера; ПутьКФайлуНаСервере = URLРазделенный.ПутьКФайлуНаСервере; Протокол = URLРазделенный.Протокол; Заголовки = Новый Соответствие; СписокФайлов = новый Массив; Соединение = Новый HTTPСоединение(ИмяСервера, , , , , , ); ИмяФайла = ВремКаталог + "\temp.htm"; HTTPОтвет = ПолучитьHTTPОтвет(ПутьКФайлуНаСервере, ИмяФайла, Соединение, Заголовки); Если HTTPОтвет.КодСостояния < 200 Или HTTPОтвет.КодСостояния >= 300 Тогда ФайлОтвета = Новый ЧтениеТекста(ВремКаталог + "\temp.htm", КодировкаТекста.UTF8); ВызватьИсключение СтроковыеФункцииКлиентСервер.ИзвлечьТекстИзHTML(ФайлОтвета.Прочитать(5 * 1024)); КонецЕсли; Возврат ИмяФайла; КонецФункции // ПолучитьФайлССервера() &НаСервереБезКонтекста Функция РазделитьURL(Знач URL) Экспорт СтруктураURL = СтруктураURI(URL); Результат = Новый Структура; Результат.Вставить("Протокол", ?(ПустаяСтрока(СтруктураURL.Схема), "http", СтруктураURL.Схема)); Результат.Вставить("ИмяСервера", СтруктураURL.ИмяСервера); Результат.Вставить("ПутьКФайлуНаСервере", СтруктураURL.ПутьНаСервере); Возврат Результат; КонецФункции &НаСервереБезКонтекста Функция СтруктураURI(Знач СтрокаURI) Экспорт СтрокаURI = СокрЛП(СтрокаURI); // схема Схема = ""; Позиция = Найти(СтрокаURI, "://"); Если Позиция > 0 Тогда Схема = НРег(Лев(СтрокаURI, Позиция - 1)); СтрокаURI = Сред(СтрокаURI, Позиция + 3); КонецЕсли; // Строка соединения и путь на сервере. СтрокаСоединения = СтрокаURI; ПутьНаСервере = ""; Позиция = Найти(СтрокаСоединения, "/"); Если Позиция > 0 Тогда ПутьНаСервере = Сред(СтрокаСоединения, Позиция + 1); СтрокаСоединения = Лев(СтрокаСоединения, Позиция - 1); КонецЕсли; // Информация пользователя и имя сервера. СтрокаАвторизации = ""; ИмяСервера = СтрокаСоединения; Позиция = Найти(СтрокаСоединения, "@"); Если Позиция > 0 Тогда СтрокаАвторизации = Лев(СтрокаСоединения, Позиция - 1); ИмяСервера = Сред(СтрокаСоединения, Позиция + 1); КонецЕсли; // логин и пароль Логин = СтрокаАвторизации; Пароль = ""; Позиция = Найти(СтрокаАвторизации, ":"); Если Позиция > 0 Тогда Логин = Лев(СтрокаАвторизации, Позиция - 1); Пароль = Сред(СтрокаАвторизации, Позиция + 1); КонецЕсли; // хост и порт Хост = ИмяСервера; Порт = ""; Позиция = Найти(ИмяСервера, ":"); Если Позиция > 0 Тогда Хост = Лев(ИмяСервера, Позиция - 1); Порт = Сред(ИмяСервера, Позиция + 1); КонецЕсли; Результат = Новый Структура; Результат.Вставить("Схема", Схема); Результат.Вставить("Логин", Логин); Результат.Вставить("Пароль", Пароль); Результат.Вставить("ИмяСервера", ИмяСервера); Результат.Вставить("Хост", Хост); Результат.Вставить("Порт", ?(ПустаяСтрока(Порт), Неопределено, Число(Порт))); Результат.Вставить("ПутьНаСервере", ПутьНаСервере); Возврат Результат; КонецФункции |