Бывают моменты когда штатный механизм отправка файла по ftp очень долго выполняет свою работу ! В данной реализации использовался Winscp все очень быстро отправляется и все хорошо работает !
Процедура ОтправитьПоFTPWinSCP(ПутьКФайлу, НазваниеФайла)
ПутьКWinSCP = "C:\Program Files (x86)\WinSCP\WinSCP.com";
// Данные FTP
Хост = "";
Логин = "";
Пароль = "";
Порт = "21"; // 22 для SFTP, 21 для FTP
Протокол = "ftp"; // sftp или ftp
УдаленнаяПапка = "/";
// 2. Создаем текст скрипта
Текст = Новый ТекстовыйДокумент;
Текст.ДобавитьСтроку("option batch abort");
Текст.ДобавитьСтроку("option confirm off");
// Строка подключения
СтрокаПодкл = СтрШаблон("open ftp://%1:%2@%3:%4", Логин, Пароль, Хост, Порт);
Текст.ДобавитьСтроку(СтрокаПодкл);
Текст.ДобавитьСтроку("option transfer binary");
Текст.ДобавитьСтроку("put """ + ПутьКФайлу + """ """ + УдаленнаяПапка + """");
Текст.ДобавитьСтроку("exit");
// === ВАЖНОЕ ИЗМЕНЕНИЕ ===
// WinSCP требует UTF-8, если в путях есть русские буквы (Гусейн)
ИмяСкрипта = ПолучитьИмяВременногоФайла("txt");
Текст.Записать(ИмяСкрипта, КодировкаТекста.UTF8);
// ========================
// 3. Запуск
Команда = СтрШаблон("""%1"" /log=""%2"" /loglevel=0 /script=""%3""",
ПутьКWinSCP, ИмяСкрипта + ".log", ИмяСкрипта);
Сообщить("Запуск WinSCP...");
Wsh = Новый COMОбъект("WScript.Shell");
// Используем Run (так проще), но ждем завершения (Истина)
Код = Wsh.Run(Команда, 0, Истина);
Если Код = 0 Тогда
Сообщить("Файл успешно отправлен!");
Иначе
Сообщить("Ошибка! Код возврата: " + Код);
// Читаем лог, чтобы понять причину (пароль не тот или сервер недоступен)
Попытка
ТекстЛога = Новый ТекстовыйДокумент;
// Лог WinSCP пишет тоже в UTF-8
ТекстЛога.Прочитать(ИмяСкрипта + ".log", КодировкаТекста.UTF8);
Сообщить("--- ЛОГ WINSCP ---");
Сообщить(ТекстЛога.ПолучитьТекст());
Исключение
Сообщить("Лог не создан или пуст.");
КонецПопытки;
КонецЕсли;
// Удаляем временные файлы
УдалитьФайлы(ИмяСкрипта);
УдалитьФайлы(ИмяСкрипта + ".log");
КонецПроцедуры
Станьте частью сообщества!
Войдите или зарегистрируйтесь, и вы сможете участвовать в обсуждениях.