Работа с 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-соединения: «Ложь» — активный режим, «Истина» — пассивный, значение по умолчанию — «Ложь». Разница заключается в том, кто устанавливает соединение для передачи данных — при активном режиме это делает сервер, при пассивном клиент. Это бывает важно при наличии брандмауэра, так как он часто запрещает входящие соединения на случайные порты.
&НаКлиенте Процедура ПодключениеК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 только в подключении к серверу, различий в работе я не увидел.
&НаКлиенте Процедура ПодключениеКFTPSИз1с(Команда) ЗащищенноеСоединение = Новый ЗащищенноеСоединениеOpenSSL(); Соединение = Новый FTPСоединение("test.rebex.net",990,"demo","password",,,,ЗащищенноеСоединение,УровеньИспользованияЗащищенногоСоединенияFTP.Требовать); Сообщить(Соединение.ТекущийКаталог()); КонецПроцедуры
Как искать файлы и каталоги по FTP из 1С?
В примере ниже показаны варианты использования функции НайтиФайлы() — получение списка файлов, поиск по маске и поиск конкретного файла. Кроме этого пример показывает какие данные о найденном файле/каталоге мы можем получить при помощи объекта FTPФайл.
&НаКлиенте Процедура ПоискФайловНа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С?
&НаКлиенте Процедура СкачатьФайлПо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С?
&НаКлиенте Процедура ПередатьФайлНа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С?
&НаКлиенте Процедура ПолучитьИУставновитьТекущийКаталогПоFTPИз1С(Команда) //получаем текущий каталог Сообщить(Соединение.ТекущийКаталог()); //устанавливаем текущий каталог Соединение.УстановитьТекущийКаталог("/test_folder_1"); КонецПроцедуры
Как создать каталог по FTP из 1С?
&НаКлиенте Процедура СоздатьКаталогПоFTPИз1С(Команда) //создание каталога Соединение.СоздатьКаталог("/test_folder_3"); Соединение.СоздатьКаталог("/test_folder_3/test_subfolder_1"); КонецПроцедуры
Как удалить каталог и файлы по FTP из 1С?
&НаКлиенте Процедура УдалитьКаталогиИФайлыПоFTPИз1С(Команда) //удаление каталога со всем его содержимым Соединение.Удалить("/test_folder_3"); //удаление одного конкретного файла Соединение.Удалить("/test_folder_1/file_1.txt"); //удаление файлов по маске Соединение.Удалить("/","*.txt"); КонецПроцедуры
Как переименовать/переместить файл или каталог по FTP из 1С?
&НаКлиенте Процедура ПереименоватьИПереместитьКаталогиИлиФайлыПоFTPВ1С(Команда) //переименование каталога //Соединение.Переместить("/test_folder_1","/test_folder_4"); //перемещение файла Соединение.Переместить("/file_1.txt", "/test_folder_2/file_1.txt"); КонецПроцедуры