1С. Пример выгрузки на SFTP через WinSCP

07 Apr
Published by Nicholas

 

Функция ВыгрузитьДанныеНаSFTP(ФайлыДанных, ПараметрыВыгрузки)
	
	Если Не ПараметрыВыгрузкиНаFTPЗаполнены(ПараметрыВыгрузки) Тогда
		Возврат Ложь;
	КонецЕсли;
	
	WshShell = Новый COMОбъект("WScript.Shell");
	
	ФайлКлиента = "\WinSCP\WinSCP.com";
	Если Не ФайлСуществует(WshShell, "%ProgramFiles(x86)%", ФайлКлиента) 
	И Не ФайлСуществует(WshShell, "%ProgramFiles%", ФайлКлиента) Тогда
		ВывестиСообщение(
			"Не обнаружена установленная программа WinSCP для работы с FTP и SFTP (сайт программы: http://winscp.net)."
		);
		Возврат Ложь;
	КонецЕсли;
	
	ФайлСкрипта = "WinSCP_script.txt";
	ФайлВывода = "WinSCP_output.txt";
	ВременныйКаталог = КаталогВременныхФайлов();
	
	ТекстКомандыFTP = "";
	// Включить пакетный режим, в котором при возникновении ошибки продолжается выполнение следующих команд
	ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "option batch continue");
	// Отключить ожидание подтверждений от пользователя
	ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "option confirm off");
	// Показывать текст исполняемых команд скрипта
	ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "option echo on");
	// Подключение
	ДобавитьСтрокуВТекстКоманды(
		ТекстКомандыFTP,
		"open "
		+ ?(ПараметрыВыгрузки.ВыгрузкаSFTP, "s", "") + "ftp://" + ПараметрыВыгрузки.ПользовательFTP
		+ ":" + ПараметрыВыгрузки.ПарольFTP
		+ "@" + ПараметрыВыгрузки.СерверFTP
		+ ":" + ПараметрыВыгрузки.ПортFTP
		+ ?(ПараметрыВыгрузки.ВыгрузкаSFTP, " -hostkey=*", "")
	);
	// Выгрузка файла
	Если ТипЗнч(ФайлыДанных) = Тип("Строка") Тогда
		ФайлНаДиске = ПолучитьФайлНаДиске(ФайлыДанных);
		Если ФайлНаДиске <> Неопределено Тогда
			ДобавитьСтрокуВТекстКоманды(
			ТекстКомандыFTP,
			"put " + ФайлыДанных + " " + ПроверитьИмяКаталогаFTP(ПараметрыВыгрузки.КаталогFTP) + ФайлНаДиске.Имя
		);
		КонецЕсли;
	ИначеЕсли ТипЗнч(ФайлыДанных) = Тип("Массив") Тогда
		Для Каждого ФайлДанных Из ФайлыДанных Цикл
			ФайлНаДиске = ПолучитьФайлНаДиске(ФайлДанных);
			Если ФайлНаДиске <> Неопределено Тогда
				ДобавитьСтрокуВТекстКоманды(
				ТекстКомандыFTP,
				"put " + ФайлДанных + " " + ПроверитьИмяКаталогаFTP(ПараметрыВыгрузки.КаталогДляФотоFTP) + ФайлНаДиске.Имя
			);
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
	
	// Закрыть подключение
	ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "close");
	// Завершить выполнение команд
	ДобавитьСтрокуВТекстКоманды(ТекстКомандыFTP, "bye");
	
	ЗаписьТекста = Новый ЗаписьТекста(
		ВременныйКаталог + ФайлСкрипта,
		КодировкаТекста.UTF8,
		,
		,
		Символы.ПС
	);
	ЗаписьТекста.Записать(ТекстКомандыFTP);
	ЗаписьТекста.Закрыть();
	
	WshShell.CurrentDirectory = ВременныйКаталог;
	КоманднаяСтрока = "cmd /C """ + ФайлКлиента + """ /script=" + ФайлСкрипта
	+ " /xmllog=WinSCP_log.xml /log=WinSCP_log.txt > " + ФайлВывода;
	
	Результат = WshShell.Run(КоманднаяСтрока, 0, Истина);
	
	Если Результат > 0 Тогда
		ЧтениеТекста = Новый ЧтениеТекста(ВременныйКаталог + ФайлВывода, КодировкаТекста.UTF8);
		Результат = ЧтениеТекста.Прочитать();
		ЧтениеТекста.Закрыть();
		ВывестиСообщение(Результат);
		Возврат Ложь;
	КонецЕсли;
	
	Возврат Истина;
	
КонецФункции

Тэги 

1С 8

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
CAPTCHA
Вы человек или автоматическая спам-рассылка?
Target Image