SFTP, протокол передачи файлов по SSH, или безопасный протокол передачи файлов, — это отдельный протокол, поддерживающий SSH, который работает схожим образом, но использует защищенное подключение. Его преимуществом является возможность использования защищенного подключения для передачи файлов и просмотра файловой системы как на локальной, так и на удаленной системе.
К сожалению, по состоянию на июль 2022 года платформа 1С:Предприятие не имеет встроенных инструментов по работе с этим протоколом. Однако, передачу файлов все равно можно организовать, но для этого нужно использовать промежуточную программу SFTP-клиент. В качестве такого клиента будем использовать программу WinSCP. Для работы модуля, который будет описан далее, эта программа должна быть установлена на компьютер.
Программа WinCSP позволяет выполнять скрипты, сохраненные предварительно в виде обычных текстовых файлов. Благодаря этому, у нас появляется возможность из 1С сформировать такой файл и запустить программу WinCSP, указав в командной строке адрес файла со скриптом, который нужно выполнить.
Полный перечень команд, которые могут использоваться в скриптах WinCSP, можно посмотреть здесь.
А мы разберем один пример: необходимо передать на web-сервер изображения товаров, сохраненные в базе 1С. Доступ к серверу осуществляется через протокол SFTP.
Процедуру выгрузки картинок опустим, предположим, что все изображения выгружаются во временный каталог, путь к которому хранится в переменной КаталогВременныхФайлов.
Процедура выгрузки будет выглядеть следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Процедура ВыгрузитьФайлыПоSFTP() ТекстСценария = "option batch abort |option confirm on |open sftp://" + Логин + ":" + Пароль + "@" + FTPСервер + ":" + Порт + " |synchronize remote " + КаталогВременныхФайлов + " " + "/var/www/www-root/data/www/chel1c.ru/YML/ |exit"; ИмяФайлаСценария = ПолучитьИмяВременногоФайла(".txt"); ФайлСценария = Новый ТекстовыйДокумент; ФайлСценария.УстановитьТекст(ТекстСценария); ФайлСценария.Записать(ИмяФайлаСценария); ПутьWinSCP = "C:\Program Files (x86)\WinSCP\WinSCP.exe"; Команда = """" + ПутьWinSCP + """ /console /log=""C:\1С\winscp.log"" /script=""" + ИмяФайлаСценария + """"; ЗапуститьПриложение(Команда,,Истина); КонецПроцедуры |
Разберем текст сценария:
- option batch abort — включает пакетный режим выполнения скрипта, при котором при любой ошибке скрипт прерывается.
- option confirm on — на все запросы подтверждения (например, перезаписи файлов) будет отправлено согласие.
- open sftp://» + Логин + «:» + Пароль + «@» + FTPСервер + «:» + Порт + » — соединение с SFTP-сервером, используя логин, пароль, адрес сервера и порт
- synchronize remote » + КаталогВременныхФайлов + » » + «/var/www/www-root/data/www/chel1c.ru/YML/ — синхронизация каталога на сервере с локальным, при этом каталог на сервере будет идентичным каталогу на локальном компьютере (можно сделать и наоборот).
- exit — завершение работы программы WinCSP.
После этого сохраняем созданный скрипт во временный файл, формируем командную сроку запуска скрипта (в данном случае с созданием лога), и запускаем его.