| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Сети > Upload файла на сервер |
| Автор: Dimich 26.10.2004, 16:12 |
| Доброго времени суток! Подскажите пожалуйста, как можно средствами Delphi загрузить файл на сервер по ftp? Уже с ног сбился в поиске решения, а так ничего и не нашел... |
| Автор: MuToGeN 27.10.2004, 11:14 |
| NMFTP вроде компонентина зволась. Еще что-то от Indy было. |
| Автор: <Spawn> 27.10.2004, 11:25 |
| Попробуй TidFTP.Put. |
| Автор: Dimich 27.10.2004, 15:41 |
| Спасибо! NMFTP и idFTP вроде работают, вот только я не могу никак через Proxy заставить их работать. В качестве ftp proxy я поставил ESERV 2.99 Я уже запутался с настройками и параметрами этих компонентов. Просьба (не сочтите за наглость) - если будет возможность, киньте кусочек кода разобраться... |
| Автор: Slawanix 6.1.2005, 23:38 | ||
Тема поднималась давно, но чем черт не шутит, по-моему, если коннектишься с фтп через проксю, надо использовать пассивный режим работы с фтпэшником. Как в других прогах Use Passiv FTP |
| Автор: Dimich 7.1.2005, 17:30 |
| Спасибо за ответ, Slawanix, но к моему сожалению пассивный режим мне ничего не дал. Я уже правда и не могу вспомнить, где у меня конкретно не получилось (надо на работе смотреть). А сама проблема конечно ждет решения, хотя временно отложена мною за наличием более важных в данное время вещей. Хотя, насколько я помню из моих мучений вышло одно: прокся проксе рознь. Вот в ESERV у меня были проблемы с одним, в других проксях с другим (к сожалению сейчас подробно не могу ничего сказать, т.к. нет под рукой наработок). Но I.E. же у меня через эти прокси работает и ему они побоку! Еще раз спасибо, Slawanix, за проявленное внимание! |
| Автор: Slawanix 9.1.2005, 00:07 | ||||
Dimich, жаль, что это не помогло. Я тоже начал заниматься этой темой, пишу свою прогу. Так что если у меня будет какое-либо решение, тебе сообщу. Просто начал очень недавно, и до этого еще не добрался Добавлено @ 00:11
с уважением, Slawanix. |
| Автор: RA 9.1.2005, 01:01 |
| А ещё можно использовать компоненты ICS |
| Автор: Slawanix 9.1.2005, 19:17 |
| А ещё можно использовать компоненты ICS RAdmin, это делфовские или сторонних разработчиков компоненты? С уважением, Slawanix. |
| Автор: RA 9.1.2005, 19:23 |
| Slawanix это самымые лутшие бесплатные дельфовские компоненты http://www.overbyte.be/ |
| Автор: Slawanix 10.1.2005, 00:10 | ||
у них эта скриптина на закачку не работает, жаль |
| Автор: RA 10.1.2005, 00:32 |
| http://www.overbyte.be/cgi-bin/redirect.cgi?url=http://www.overbyte.be/arch/icsbeta20050109.zip |
| Автор: Slawanix 10.1.2005, 00:56 |
| RAdmin, спасибо, уже качаю |
| Автор: RA 26.1.2005, 20:57 | ||
|
| Автор: Slawanix 6.2.2005, 02:45 | ||
Уважаемые, есть ли у кого-нибудь литература по работе с этими компонентами, а то в книге нет, не от чего оттолкнуться. Помогите, чем смогите, пожалуйста |
| Автор: Akella 16.2.2005, 13:56 |
| Мне кажется, что код RAdmin`а нужно вставить в FAQ и, конечно в DRKB |
| Автор: Ищущий! 3.6.2005, 22:28 | ||||
Отличная штука... и тут вопрос... а как узнать прогресс загрузки, сколько загружено и сколько осталось? |
| Автор: RA 3.6.2005, 23:15 | ||
|
| Автор: Ищущий! 4.6.2005, 15:21 |
| Типа огромное спасибо... а мож чуть еще помучать Вас |
| Автор: RA 4.6.2005, 16:22 |
| Из выше показанного примера следует что BytesOut - колличество отправленных байт BytesIn - колличество принятых байт следовательно что бы сделать прогресс: {Upload} //Делим кол-во отправленных байт на Размер твоего файла и умножаем на 100. //(Ну и округляем это дело) ProgressBar1.Position:=Round(BytesOut / MyFileSize * 100); //MyFileSize - кол-во байт d твоем файле, только не спрашивай как узнать сколько //весит твой фаил {Download} //The same shit. ProgressBar1.Position:=Round(BytesIn / MyFileSize * 100); //MyFileSize - кол-во байт в файла на фтпЕ, получаем с помощью //функции FtpGetFileSize из тогоже winInet. ЗЫ: "ProgressBar1.Position:= ..." можешь засунуть прям в конец процедуры InetCallback; |
| Автор: Ищущий! 4.6.2005, 18:42 | ||
Спасибо, это то что мне надо было услыхать |
| Автор: RA 4.6.2005, 19:05 |
| Пожал100 |
| Автор: Akella 7.6.2005, 16:12 | ||
| для получения размера файла, нужно ли его открывать? типа
Добавлено @ 16:16 что поставить в качестве dwAccess? Добавлено @ 16:22 нашёл GENERIC_READ |
| Автор: Akella 7.6.2005, 16:29 | ||
а что енто ща второй параметр?
|
| Автор: RA 7.6.2005, 16:34 | ||
Угу. Кстати можно, получить размер файла через FtpFindFirstFile. |
| Автор: Akella 7.6.2005, 16:50 | ||||
в каком месте нужно её вызвать? Добавлено @ 16:52
Я ведь оправляю несколько файлов |
| Автор: RA 7.6.2005, 20:23 | ||||||||
| То выше был чисто пример (наверное я этим примеров всех запутал), на самомо деле стоит разделять отправку, соединение и разъединение.
........
Упс не заметил этого вопроса. Тут первым параметром идёт Хендл полученный после вызова FtpOpenFile второй параметр возвращает размер нашего файла. var FSize: Int64; ... FtpGetFileSize(FileHandle,Fsize); далее форматируй Fsize. Добавлено @ 20:25
После того как получил хэндл от InternetOpen Добавлено @ 20:29
Плз не пиши таких вещей как lvFilesToSend.Items[_if].Caption и sPathToSave+lvFilesToSend.Items я же не знаю что в них вписанно. А вобще конструкция вроде рабочая, вот только от try except можно избавиться. |
| Автор: Ak47t 25.7.2005, 20:52 |
| Опишите пожалуйста если не лень |
| Автор: RA 25.7.2005, 22:48 | ||
|
| Автор: Ak47t 25.7.2005, 22:59 |
| большое спасибо |
| Автор: Dimich 4.8.2005, 15:25 | ||
Сколько времени прошло, пришлось таки вернуться к неразрешенной еще тогда проблемке: работа с ftp через проксю. В качестве прокси стоит на линуксовой машине squid. Собственно это не ftp прокси, а HTTPS с поддержкой FTP. Так может тут какие нюансы есть? Не знаю, поэтому если кто знает, объясните плиз. Но IE работает ведь с ftp, Total Commander тож работает. Как и мне такое сделать (чтоб работало) пока не понял.... Пробовал код Radmin'a - не хочет через проксю соединяться, NMFTP и idFTP тоже не хотят через мою проксю, установил ICS компоненты - та же ситуация.....
Подскажите, как быть? Где я делаю не правильно? Как еще можно решить задачу upload/download файлов на ftp через прокси? |
| Автор: Dimich 9.8.2005, 16:03 | ||
Ситуация развивается следующим образом: решил все делать функциями API, через WinInet. Вот что получилось для Download:
Это работает через прокси замечательно, а вот как закачать файл на ftp сервер? Ответ напрашивается самим собой - InternetWriteFile. Но простая замена Read на Write тут не проходит. GetLastError возвращает ошибку после InternetWriteFile: ERROR_INTERNET_INCORRECT_HANDLE_STATE (12019) - The requested operation cannot be carried out because the handle supplied is not in the correct state. Смысл ошибки вроде как понятен. А как решить эту задачу не знаю. Знаний маловато. Собственно читаю http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wininet/wininet/internetwritefile.asp, но реализовать на практике ничего не получается. |
| Автор: belka 15.12.2006, 12:15 |
что означает @InetCallback?? вернее что значит @??? да и InetCallback?? что все это?? --- сорри за тупой вопрос )) |
| Автор: Matematik 15.12.2006, 12:32 |
| В ф-ю InternetSetStatusCallback() передается адрес ф-и InetCallback() InetCallback() - callback ф-я @ - взять адрес финкции |
| Автор: belka 15.12.2006, 12:51 |
| Matematik, блин, а можно как-нить поподробнее?? я пробую код RA'dmina, так вот что-то не так получается.. дебагер ругает @InetCallBack - пишет что "Undeclared identifier 'InetCallback'"!! блин.. ПОЧЕМУ?? |