Работа с FTP в 1С 8.2 и 8.3
Общая информация
Для работы с протоколом FTP у технологической платформы 1С имеется два главных объекта — FTPСоединение и FTPФайл, кроме них существует объект ЗащищенноеСоединениеOpenSSL — который используется для подключения к FTPS-серверам (не следует путать с SFTP), а также объект ИнтернетПрокси — который используется для соединения с FTP-сервером через прокси-сервер.
FTPСоединение ключевой объект для работы с FTP в 1С — именно через этот объект происходит и соединение с FTP/FTPS сервером и все дальнейшие действия. Все параметры для соединения с сервером указываются в конструкторе объекта.
FTPФайл служит для получения информации о каталогах и файлах на FTP-сервере — этот объект позволяет получить информацию по объекту на FTP-сервере: имя, путь расширение, размер и тд.
ИнтернетПрокси позволяет указать прокси-сервер используемый для соединения с FTP/FTPS сервером — параметры для подключения к прокси-серверу указываются методом Установить(). Использование свойств «Пароль» и «Пользователь» нежелательно, так как эти свойства являются устаревшими.
ЗащищенноеСоединениеOpenSSL создает защищенное соединение OpenSSL — предоставляет возможность организовать защищенное соединение с FTP-сервером, также имеется возможность конкретный сертификат клиента и/или сертификат удостоверяющего центра.
Практические задачи при работе с FTP
В качестве практических примеров рассмотрим все операции которые позволяет выполнить объект FTPСоединение.
Как подключиться к серверу FTP?
Параметры для подключения указываются в конструкторе, сами параметры достаточно стандартны. Отдельно скажу про два параметра:
- Таймаут — позволяет указать таймаут в секундах для установки соединения и выполнения операций;
- Пассивное соединение — определяет тип FTP-соединения: «Ложь» — активный режим, «Истина» — пассивный, значение по умолчанию — «Ложь». Разница заключается в том, кто устанавливает соединение для передачи данных — при активном режиме это делает сервер, при пассивном клиент. Это бывает важно при наличии брандмауэра, так как он часто запрещает входящие соединения на случайные порты.
123456789101112&НаКлиентеПроцедура ПодключениеКFTPИз1С(Команда)//самый минималистичный вариант для анонимного пользователяСоединение = Новый FTPСоединение("localhost");//если номер порта стандартный, то его можно не указывать//стандартные номера портов: 21 - FTP и 990 - FTPSСоединение = Новый FTPСоединение("localhost",21,"login","password");//пассивное соединение с таймаутом 10 секундСоединение = Новый FTPСоединение("localhost",21,"login","password",,Истина,10);КонецПроцедурыКак подключиться к серверу FTPS?
Настраивать собственный FTPS-сервер у меня не было никакого желания, поэтому воспользовался публичными серверами test.rebex.net. Различия между FTP и FTPS только в подключении к серверу, различий в работе я не увидел.
-
123456789&НаКлиентеПроцедура ПодключениеКFTPSИз1с(Команда)ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL();Соединение = Новый FTPСоединение("test.rebex.net",990,"demo","password",,,,ЗащищенноеСоединение,УровеньИспользованияЗащищенногоСоединенияFTP.Требовать);Сообщить(Соединение.ТекущийКаталог());КонецПроцедуры
Как искать файлы и каталоги по FTP из 1С?
В примере ниже показаны варианты использования функции НайтиФайлы() — получение списка файлов, поиск по маске и поиск конкретного файла. Кроме этого пример показывает какие данные о найденном файле/каталоге мы можем получить при помощи объекта FTPФайл.
123456789101112131415161718192021222324252627282930313233343536&НаКлиентеПроцедура ПоискФайловНаFTPИз1С(Команда)Соединение = Новый FTPСоединение("localhost",21,"login","password");//получим список всех файлов на FTP//в результате получаем массив объектов FTPФайлНайденныеОбъекты = Соединение.НайтиФайлы("/","*.txt",Истина);Если НайденныеОбъекты.Количество()>0 ТогдаДля Каждого ОбъектFTP Из НайденныеОбъекты ЦиклСообщить("Имя файла: "+ОбъектFTP.ПолноеИмя);Сообщить("Имя файла: "+ОбъектFTP.Путь+ОбъектFTP.ИмяБезРасширения+ОбъектFTP.Расширение);Сообщить("Это каталог: "+ОбъектFTP.ЭтоКаталог());Сообщить("Это файл: "+ОбъектFTP.ЭтоФайл());Если ОбъектFTP.ЭтоФайл() Тогда//размер имеется только у файловСообщить("Размер: "+ОбъектFTP.Размер()+" байт");КонецЕсли;Сообщить("Только для чтения: "+ОбъектFTP.ПолучитьТолькоЧтение());Сообщить("Скрытый: "+ОбъектFTP.ПолучитьНевидимость());Сообщить("Время изменения: "+ОбъектFTP.ПолучитьВремяИзменения());КонецЦикла;КонецЕсли;//можно поискать что-то более конкретное, например по маскеНайденныеОбъекты = Соединение.НайтиФайлы("/","*.txt",Истина);//или просто найти конкретный файлНайденныеОбъекты = Соединение.НайтиФайлы("/test_folder_1/file_1.txt");КонецПроцедурыКак скачивать файлы по FTP из 1С?
123456789101112131415&НаКлиентеПроцедура СкачатьФайлПоFTPИз1С(Команда)Соединение = Новый FTPСоединение("localhost",21,"login","password");//классический вариант//первый параметр - что скачать, второй параметр - куда скачатьСоединение.Получить("/test_folder_1/file_1.txt","D:\file.txt");//вариант с использованием потока//первый параметр - что скачать, воторой параметр - поток в который будут помещены полученные данныеПоток = Новый ФайловыйПоток("D:\file.txt", РежимОткрытияФайла.СоздатьНовый, ДоступКФайлу.ЧтениеИЗапись);Соединение.Получить("/test_folder_1/file_1.txt",Поток);КонецПроцедурыКак передавать файлы по FTP из 1С?
123456789101112131415&НаКлиентеПроцедура ПередатьФайлНаFTPИз1С(Команда)Соединение = Новый FTPСоединение("localhost",21,"login","password");//классический вариант//первый параметр - что передать, второй параметр - куда передатьСоединение.Записать("D:\file.txt","/test_folder_1/file_2.txt");//вариант с использованием потока//первый параметр - куда передать, воторой параметр - поток из которого взять данныеПоток = Новый ФайловыйПоток("D:\file.txt", РежимОткрытияФайла.Открыть, ДоступКФайлу.Чтение);Соединение.Записать("/test_folder_1/file_2.txt",Поток);КонецПроцедурыПрочие действия с файлами и каталогами по FTP из 1С
Далее приведены короткие примеры, демонстрирующие возможности технологической платформы по выполнению различных простых операций над каталогами и файлами по FTP. Инициализация переменной «Соединение» (т.е. подключение к FTP-серверу) опущена для краткости.
Как получить и установить текущий каталог по FTP из 1С?
12345678910&НаКлиентеПроцедура ПолучитьИУставновитьТекущийКаталогПоFTPИз1С(Команда)//получаем текущий каталогСообщить(Соединение.ТекущийКаталог());//устанавливаем текущий каталогСоединение.УстановитьТекущийКаталог("/test_folder_1");КонецПроцедурыКак создать каталог по FTP из 1С?
12345678&НаКлиентеПроцедура СоздатьКаталогПоFTPИз1С(Команда)//создание каталогаСоединение.СоздатьКаталог("/test_folder_3");Соединение.СоздатьКаталог("/test_folder_3/test_subfolder_1");КонецПроцедурыКак удалить каталог и файлы по FTP из 1С?
-
12345678910111213&НаКлиентеПроцедура УдалитьКаталогиИФайлыПоFTPИз1С(Команда)//удаление каталога со всем его содержимымСоединение.Удалить("/test_folder_3");//удаление одного конкретного файлаСоединение.Удалить("/test_folder_1/file_1.txt");//удаление файлов по маскеСоединение.Удалить("/","*.txt");КонецПроцедуры
Как переименовать/переместить файл или каталог по FTP из 1С?
12345678910&НаКлиентеПроцедура ПереименоватьИПереместитьКаталогиИлиФайлыПоFTPВ1С(Команда)//переименование каталога//Соединение.Переместить("/test_folder_1","/test_folder_4");//перемещение файлаСоединение.Переместить("/file_1.txt", "/test_folder_2/file_1.txt");КонецПроцедуры