Имя: Пароль:
1C
1C 7.7
v7: Выложить файл на FTP с помощью curl.exe
,
0 МастерВопросов
 
26.10.12
17:17
Подскажите синтаксис, плс. Где то встречал, теперь не могу найти.
Что то типа
CURL.EXE -t c:\2\categories.csv -u пароль:логин адрес ftp:\\

Предыстория:
раньше выкладывал с помощью ftp.exe, но у клиента поменялся сервер и требуется какой то пассивный режим. Поиск по Мисте говорит что в таких случаях вместо ftp.exe, надо юзать CURL.EXE.

Файл со скриптом для ftp.exe был такой:

open XX.XXX.XX.XX 24021
логин
пароль
prompt
ascii
hash
status
cd oneC
cd files
put c:\2\flag.m
put c:\2\entries.csv
put c:\2\categories.csv
get flag.m flag.m2
del flag.m
quit
1 Builder
 
26.10.12
17:19
Есть еще wput.exe, я им пользуюсь.
2 varelchik
 
26.10.12
17:20
возьми dialmail.dll
там очень мощный фтп клиент.
3 varelchik
 
26.10.12
17:21
а курл фигня полнейшая.
я тож колысь пытался заставить его работать, так толком он и не заработал посему забил и перешол на dialmail.
4 UnAmerican
 
26.10.12
17:22
5 UnAmerican
 
26.10.12
17:24
dialmail.dll  - не умеет фтпс
6 varelchik
 
26.10.12
17:25
(5) ЧАВО?
Ты хоть понял что написал?
7 varelchik
 
26.10.12
17:26
ВОТ:
Функция ВыгрузитьВФТП()
   ФТП=СоздатьОбъект("AddIn.FTP");
   Если ФТП.Подключиться(СокрЛП(База.АдресСервера),21,СокрЛП(База.Логин),СокрЛП(База.Пароль),База.ПассивныйРежим)=1 тогда
       Если ФТП.СменитьКаталог(СокрЛП(База.КаталогВыгрузки))=0 Тогда
           ФТП.СоздатьКаталог(СокрЛП(База.КаталогВыгрузки));
           Если ФТП.СменитьКаталог(СокрЛП(База.КаталогВыгрузки))=0 Тогда
               глЗаписьЖурналаРегистрации("Ошибка каталога выгрузки!",1,,,,5);
               глЗаписьЖурналаРегистрации(ФТП.ПоследняяОшибка,1,,,,5);
               глЗаписьЖурналаРегистрации(ФТП.ПоследнийОтветСервера,1,,,,5);
               Возврат 0;
           КонецЕсли;
       КонецЕсли;
   Иначе
       глЗаписьЖурналаРегистрации("Ошибка подключения к FTP серверу!",1,,,,5);
       глЗаписьЖурналаРегистрации(ФТП.ПоследняяОшибка,1,,,,5);
       глЗаписьЖурналаРегистрации(ФТП.ПоследнийОтветСервера,1,,,,5);
       Возврат 0;
   КонецЕсли;
   ФС.УстТекКаталог(СокрЛП(База.ПутьКБазеПриВыгрузке));
   Если База.ВстроеннаяАрхивация=1 Тогда
       Маска="*.zip";
   Иначе
       Маска="*.mod";
   КонецЕсли;
   СписокФайлов=СоздатьОбъект("СписокЗначений");
   ИмяФайла=ФС.НайтиПервыйФайл(Маска);
   Пока ПустоеЗначение(ИмяФайла)=0 Цикл
       СписокФайлов.ДобавитьЗначение(ИмяФайла);
       ИмяФайла=ФС.НайтиСледующийФайл();
   КонецЦикла;
   Для н=1 По СписокФайлов.РазмерСписка() Цикл
       ИмяФайла=СписокФайлов.ПолучитьЗначение(н);
       ИмяФайлаЛокально=СокрЛП(База.ПутьКБазеПриВыгрузке)+?(Прав(СокрЛП(База.ПутьКБазеПриВыгрузке),1)="\","","\")+ИмяФайла;
       Если ФТП.ОтправитьФайл(ИмяФайлаЛокально,ИмяФайла)=0 Тогда
           глЗаписьЖурналаРегистрации("Ошибка отправки файла! "+ИмяФайлаЛокально,1,,,,5);
           глЗаписьЖурналаРегистрации(ФТП.ПоследняяОшибка,1,,,,5);
           глЗаписьЖурналаРегистрации(ФТП.ПоследнийОтветСервера,1,,,,5);
           Возврат 0;
       КонецЕсли;
   КонецЦикла;
КонецФункции


Функция ЗагрузитьИзФТП()
   ФТП=СоздатьОбъект("AddIn.FTP");
   Если ФТП.Подключиться(СокрЛП(База.АдресСервера),21,СокрЛП(База.Логин),СокрЛП(База.Пароль),База.ПассивныйРежим)=1 тогда
       Если ФТП.СменитьКаталог(СокрЛП(База.КаталогЗагрузки))=0 Тогда
           ФТП.СоздатьКаталог(СокрЛП(База.КаталогЗагрузки));
           Если ФТП.СменитьКаталог(СокрЛП(База.КаталогЗагрузки))=0 Тогда
               глЗаписьЖурналаРегистрации("Ошибка каталога загрузки!",1,,,,5);
               глЗаписьЖурналаРегистрации(ФТП.ПоследняяОшибка,1,,,,5);
               глЗаписьЖурналаРегистрации(ФТП.ПоследнийОтветСервера,1,,,,5);
               Возврат 0;
           КонецЕсли;
       КонецЕсли;
   Иначе
       глЗаписьЖурналаРегистрации("Ошибка подключения к FTP серверу!",1,,,,5);
       глЗаписьЖурналаРегистрации(ФТП.ПоследняяОшибка,1,,,,5);
       глЗаписьЖурналаРегистрации(ФТП.ПоследнийОтветСервера,1,,,,5);
       Возврат 0;
   КонецЕсли;
   ФС.УстТекКаталог(СокрЛП(База.ПутьКБазеПриЗагрузке));
   ФТП.Лист();
   КолФайлов=ФТП.КоличествоФайлов();
   рез=1;
   Для н=1 По КолФайлов Цикл
       ИмяНаФТП=ФТП.ПолучитьИмяФайла(н);
       Если ФТП.ПолучитьФайл(ИмяНаФТП,СокрЛП(База.ПутьКБазеПриЗагрузке)+"\"+ИмяНаФТП)=0 Тогда
           глЗаписьЖурналаРегистрации("Ошибка получения файла с FTP! "+ИмяНаФТП,1,,,,5);
           глЗаписьЖурналаРегистрации(ФТП.ПоследняяОшибка,1,,,,5);
           глЗаписьЖурналаРегистрации(ФТП.ПоследнийОтветСервера,1,,,,5);
           рез=0;
       Иначе
           ФТП.УдалитьФайл(ИмяНаФТП);
       КонецЕсли;
   КонецЦикла;
   ФТП.Отключиться();
   Возврат рез;
КонецФункции
8 Гинзбург
 
26.10.12
17:27
пользуйтесь проводником, он все умеет
9 varelchik
 
26.10.12
17:27
уже лет 10 встроил в МОДа вместо его родного обмена через ФТП.
10 МастерВопросов
 
26.10.12
17:29
(4) спасибо. Буду экспериментировать.
11 UnAmerican
 
26.10.12
17:30
(7) А где тут FTPS через SSL? В твоем примере.
CURL - tftp ftp telnet dict ldap http file https ftps
12 varelchik
 
26.10.12
17:39
(11) так человек кажить что ему нужен пасисвный режим.
причем тута ftps?
13 BigHarry
 
26.10.12
17:41
(3) curl - нормальная приблуда, а то что кто-то там не осилил почитать документацию - curl не виноват.
14 varelchik
 
26.10.12
17:42
помница у него толи с доставкой толи с получением проблемы.
точно не припомню, потому и отказался.
15 BigHarry
 
26.10.12
17:43
(14) Нет никаких проблем ни с доставкой, ни с получением, ни с пассивными режимами.
16 varelchik
 
26.10.12
17:50
(15) каждому свое.
17 UnAmerican
 
26.10.12
17:52
(12) Тебе на твой пост (3). Ни красиво обсерать продукт массового использования. И так однозначно.
18 Злопчинский
 
26.10.12
18:26
есть еще такая ncftp - [jhjibt djpvj;yjcnb
http://www.ncftp.com/ncftp/doc/ncftp.html
/
passive
This controls ncftp's behavior for data connections, and can be set to one of on, off, or the default, optional. When passive mode is on, ncftp uses the FTP command primitive PASV to have the client establish data connections to the server. The default FTP protocol behavior is to use the FTP command primitive PORT which has the server establish data connections to the client. The default setting for this variable, optional, allows ncftp to choose whichever method it deems necessary.
/
http://citforum.ru/operating_systems/manpages/NCFTP.1.shtml
19 МастерВопросов
 
27.10.12
07:43
curl: <25>  Failed ftp upload: 553
20 МастерВопросов
 
27.10.12
08:02
http://www.osp.ru/win2000/2006/01/380297/

"После установки Curl следует убедиться в его работоспособности, введя команду

curl http://isc.sans.org/infocon.txt

Если на экране появится слово, обозначающее цвет (например, green), значит, Curl работает."

у меня, однака, работает
21 МастерВопросов
 
27.10.12
08:16
(19) ну вот чай попил и сразу разобрался в чем дело!
В ftp адресе в конце надо было слеш "/" добавить
22 Гинзбург
 
27.10.12
14:19
в виндузе уже все реализовано


Перем Шел;
//*******************************************
Процедура Сформировать()
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="JScript";
   
   Шел=СоздатьОбъект("Shell.Application");
   Сп=СоздатьОбъект("СписокЗначений");
   Сп.ДобавитьЗначение("flag.m","flag.m");
   Сп.ДобавитьЗначение("entries.csv","entries.csv");
   Сп.ДобавитьЗначение("categories.csv","categories.csv");
   Для Сч=1 По Сп.РазмерСписка() Цикл
       ФС.УдалитьФайл(КаталогВременныхФайлов()+Сп.ПолучитьЗначение(Сч));
   КонецЦикла;
   Времянка=Шел.NameSpace(КаталогВременныхФайлов());
   Логин="Логин";
   Пароль="Пароль";
   Сервер="фтр.чегото.сру";
   Папка=Шел.NameSpace("c:\2\");
   Путь="ftp://"+Логин+":"+Пароль+"@"+Сервер+"/oneC/files/";
   ПапкаФТП=Шел.NameSpace(Путь);
   Темы=ПапкаФТП.Items();
   Темы.Filter(32+64+128,"*");
   Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
   Скрипт.language="JScript";
   Скрипт.AddObject("ПапкаФТП",ПапкаФТП);
   Скрипт.AddObject("Времянка",Времянка);
   Для Сч=1 По Сп.РазмерСписка() Цикл
       х=Скрипт.Eval("new Enumerator(ПапкаФТП.Items())");
       Пока х.atEnd(0)=0 Цикл
           Если х.item(0).Name=Сп.ПолучитьЗначение(Сч) Тогда
               Времянка.MoveHere(Путь+Сп.ПолучитьЗначение(Сч));
               ВвестиСтроку("Ждем","Ждем",,,1);
               Прервать;
           КонецЕсли;
           х.moveNext();
       КонецЦикла;
       ФС.УдалитьФайл(КаталогВременныхФайлов()+Сп.ПолучитьЗначение(Сч));
       ПапкаФТП.CopyHere(Папка.Self.Path+"\"+Сп.ПолучитьЗначение(Сч));
       ВвестиСтроку("Ждем","Ждем",,,1);
   КонецЦикла;
   ФС.УдалитьФайл(Папка.Self.Path+"\"+Сп.Получить("flag.m"));
   Папка.MoveHere(Путь+Сп.Получить("flag.m"));
КонецПроцедуры