1
0
mirror of https://github.com/alei1180/curlone.git synced 2025-11-24 22:53:34 +02:00

feat: Поддержка опции получения списка файлов дериктории FTP --list-only

This commit is contained in:
Dmitry Ivanov
2025-01-10 19:53:42 +03:00
parent 0b579720e9
commit cb8b345ba4
3 changed files with 33 additions and 1 deletions

View File

@@ -590,6 +590,8 @@
ВывестиВызовПолученияФайлаFTP(ОписаниеРесурса, СтруктураURL);
ИначеЕсли ОписаниеРесурса.Метод = "STOR" Тогда
ВывестиВызовОтправкиФайлаFTP(ОписаниеРесурса, СтруктураURL);
ИначеЕсли ОписаниеРесурса.Метод = "NLST" Тогда
ВывестиПолучениеСпискаФайловВДиректорииFTP(СтруктураURL);
Иначе
Если ЗначениеЗаполнено(ОписаниеРесурса.Метод) Тогда
ТекстОшибки = СтрШаблон("FTP метод '%1' не поддерживается", ОписаниеРесурса.Метод);
@@ -639,6 +641,18 @@
КонецПроцедуры
Процедура ВывестиПолучениеСпискаФайловВДиректорииFTP(СтруктураURL)
ПараметрыФункции = Новый Массив;
ПараметрыФункции.Добавить(ОбернутьКавычками(СтруктураURL.Путь));
ПараметрыФункции.Добавить(ОбернутьКавычками("*"));
ВывестиСтроку(СтрШаблон("Файлы = %1.НайтиФайлы(%2);",
ИмяПараметраСоединение,
ПараметрыФункцииВСтроку(ПараметрыФункции)));
КонецПроцедуры
Функция СобратьИсходнуюСтрокуЗапроса(СтруктураURL)
СтрокаЗапроса = "";

View File

@@ -194,6 +194,8 @@
ИначеЕсли ОбщегоНазначения.ЭтоFTP(СтруктураURL.Схема) Тогда
Если Файлы.Количество() Тогда
Метод = "STOR"; // Залить файл
ИначеЕсли ПоследнееЗначениеОпции(Команда, "list-only") = Истина Тогда
Метод = "NLST"; // Список имен файлов в директории
Иначе
Метод = "RETR"; // Скачать файл
КонецЕсли;
@@ -787,6 +789,7 @@
Приложение.Опция("oauth2-bearer", "", "Bearer-token").ТМассивСтрок();
Приложение.Опция("ftp-pasv", , "Использование пассивного режима ftp-соединения").ТМассивБулево();
Приложение.Опция("P ftp-port", "", "Использование активного режима ftp-соединения").ТМассивСтрок();
Приложение.Опция("l list-only").ТМассивБулево();
КонецЕсли;
Если ВключатьНеподдерживаемые Тогда
@@ -879,7 +882,6 @@
Приложение.Опция("krb").ТМассивСтрок();
Приложение.Опция("libcurl").ТМассивСтрок();
Приложение.Опция("limit-rate").ТМассивСтрок();
Приложение.Опция("l list-only").ТМассивБулево();
Приложение.Опция("local-port").ТМассивСтрок();
Приложение.Опция("L location").ТМассивБулево();
Приложение.Опция("location-trusted").ТМассивБулево();

View File

@@ -74,6 +74,7 @@
СписокТестов.Добавить("ТестДолжен_ПроверитьОтправкуПоFTPСУказаниемЦелевогоИмени");
СписокТестов.Добавить("ТестДолжен_ПроверитьОтправкуПоFTPВКореньБезУказанияЦелевогоИмени");
СписокТестов.Добавить("ТестДолжен_ПроверитьОтправкуПоFTPВКаталогБезУказанияЦелевогоИмени");
СписокТестов.Добавить("ТестДолжен_ПроверитьПолучениеСпискаФайловВДиректорииFTP");
Возврат СписокТестов;
@@ -1527,3 +1528,18 @@
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
КонецПроцедуры
Процедура ТестДолжен_ПроверитьПолучениеСпискаФайловВДиректорииFTP() Экспорт
КонсольнаяКоманда = "curl ftp://ftp.example.com/dir --list-only";
ПрограммныйКод = "Соединение = Новый FTPСоединение(""ftp.example.com"", 21, , , , Истина);
|
|Файлы = Соединение.НайтиФайлы(""/dir"", ""*"");";
КонвертерКомандыCURL = Новый КонвертерКомандыCURL();
Результат = КонвертерКомандыCURL.Конвертировать(КонсольнаяКоманда, Новый ГенераторПрограммногоКода1С());
Ожидаем.Что(Результат).Равно(ПрограммныйКод);
КонецПроцедуры