FTP - момент полной закачки файла
От: ttonik  
Дата: 04.02.09 16:48
Оценка:
Есть некий FTP сервер. Пользователь логинться и закачивает файл.
Задача:
после того как файл залит полностью выполнить некоторое действие (перенести файл в другой каталог).

Проблема:
я исследовал сервера для unix лайк систем на предмет это фичи. http://www.pureftpd.org позволяте запускать скрипт после того как юзер прекращает
заливать файл. НО! Скрипт вызывается даже если связь просто обрывается и реально файл докачен только на половину. Ни чего похожего в других серверах я не нашел.

Это все преамбула. Теперь сами вопросы:

1) Протокол FTP сам по себе подразумевает что сервере может отловить момен когда файл полностью закачен? Может ли сервер (теоретически) отличить
момент когда файл закачен логически, с точки зраения клиента от простого обрыва связи? К сожалению я не смог нагуглить ответ.

2) Если да, знает ли кто ни будь готовый сервер который делал бы это? (через анализ логов сервера, дерганья скрипта или еще както)? Сервер нужен под FreeBSD
ftp linux
Re: FTP - момент полной закачки файла
От: Michael Chelnokov Украина  
Дата: 04.02.09 19:11
Оценка:
Здравствуйте, ttonik, Вы писали:

T>1) Протокол FTP сам по себе подразумевает что сервере может отловить момен когда файл полностью закачен?


К сожалению, нет. Это довольно серьезная проблема, доставляющая много неудобств, но такой протокол.
Re: FTP - момент полной закачки файла
От: IT Россия linq2db.com
Дата: 04.02.09 19:44
Оценка:
Здравствуйте, ttonik, Вы писали:

T>2) Если да, знает ли кто ни будь готовый сервер который делал бы это? (через анализ логов сервера, дерганья скрипта или еще както)? Сервер нужен под FreeBSD


Проще всего обеспечить 100% гарантию, если сопровождать закачку по фтп дополнительным служебным файлом, который будет содержать всю необходимую информацию о закачиваемых файлах.
Если нам не помогут, то мы тоже никого не пощадим.
Re: FTP - момент полной закачки файла
От: Vamp Россия  
Дата: 04.02.09 19:52
Оценка:
T>1) Протокол FTP сам по себе подразумевает что сервере может отловить момен когда файл полностью закачен? Может ли сервер (теоретически) отличить
T>момент когда файл закачен логически, с точки зраения клиента от простого обрыва связи?
Нет. Протокол FTP подразумевает, содединение закрывается после того, как полностью отправлен. С другой стороны, не очень понятно, что значит "закачан полностью"? После того, как соединение закрыто, файл на сервере, другого не будет. Собственно говоря, что вообще значит эта постановка вопроса — файл докачался полностью?
Да здравствует мыло душистое и веревка пушистая.
Re[2]: FTP - момент полной закачки файла
От: ttonik  
Дата: 04.02.09 19:58
Оценка:
Здравствуйте, Michael Chelnokov, Вы писали:

MC>Здравствуйте, ttonik, Вы писали:


T>>1) Протокол FTP сам по себе подразумевает что сервере может отловить момен когда файл полностью закачен?


MC>К сожалению, нет. Это довольно серьезная проблема, доставляющая много неудобств, но такой протокол.


Спасибо огромное. Найти наличие чего то у меня всегда хорошо получалось. А вот найти отсутствие чего либо — это сложнее.
Но Вы подтвердили мои ожидания.
Re[2]: FTP - момент полной закачки файла
От: ttonik  
Дата: 04.02.09 20:06
Оценка:
Здравствуйте, IT, Вы писали:

IT>Здравствуйте, ttonik, Вы писали:


T>>2) Если да, знает ли кто ни будь готовый сервер который делал бы это? (через анализ логов сервера, дерганья скрипта или еще както)? Сервер нужен под FreeBSD


IT>Проще всего обеспечить 100% гарантию, если сопровождать закачку по фтп дополнительным служебным файлом, который будет содержать всю необходимую информацию о закачиваемых файлах.


Да, если бы клиент был в нашей власти, то это было бы лучше всего. Но это будет публичный сервис и клиенты могут быть самые разношерстные.

Если кому то понадобиться в будущем, то краткое резюме моих изысканий.

* FTP не имеет средств что бы отличить ситуацию, когда файл залит на 100% или по дороге произошел обрыв связи.
* если клиент отвалился, то на 100% в не можете сказать был ли файл закачен
* лучше (имхо) что можно сделать в данной ситуации это сканировать каталог на предмет файлов которые не изменялись, скажем 15 мин

$cmd = "find $ftpPath -mmin +15 -type f | grep -v .ftpquota ";

и предпологать что 15 мин это достаточное время что бы клиент если что переконектился и начал бы доливать файл. Где то видел упоминания что даже Yahoo
делает так на каких то своих сервисах.

* Если нужно быть уверенным что файл точно залит произвольным клиентом — лучше не использовать FTP

Надеюсь кому ни будь поможет
Re[2]: FTP - момент полной закачки файла
От: ttonik  
Дата: 04.02.09 20:09
Оценка:
Здравствуйте, Vamp, Вы писали:

T>>1) Протокол FTP сам по себе подразумевает что сервере может отловить момен когда файл полностью закачен? Может ли сервер (теоретически) отличить

T>>момент когда файл закачен логически, с точки зраения клиента от простого обрыва связи?
V>Нет. Протокол FTP подразумевает, содединение закрывается после того, как полностью отправлен. С другой стороны, не очень понятно, что значит "закачан полностью"? После того, как соединение закрыто, файл на сервере, другого не будет. Собственно говоря, что вообще значит эта постановка вопроса — файл докачался полностью?

Соединение может быть закрыто не штатно — у клиента вырубился свет. То что на сервере лежит 10Мб чего то, еще не значит что это именно то что хотел залить клиент.

Но, я уже подвел итог в ответе IT, думаю в моем случае это лучше что можно придумать.

Всем огромное спасибо за помощь!
Re[3]: FTP - момент полной закачки файла
От: Vamp Россия  
Дата: 04.02.09 20:15
Оценка:
T>Соединение может быть закрыто не штатно — у клиента вырубился свет. То что на сервере лежит 10Мб чего то, еще не значит что это именно то что хотел залить клиент.
Даже, если соединение закрыто штатно, ты все равно не можешь быть уверен, что это то, что хотел залить клиент. Он мог перепутать файл, например.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: FTP - момент полной закачки файла
От: Michael Chelnokov Украина  
Дата: 06.02.09 11:48
Оценка:
Здравствуйте, Vamp, Вы писали:

V>С другой стороны, не очень понятно, что значит "закачан полностью"? После того, как соединение закрыто, файл на сервере, другого не будет. Собственно говоря, что вообще значит эта постановка вопроса — файл докачался полностью?


Не будте таким занудой
Понятие "файл" подразумевает наличие атрибутов, в число которых входит и размер (как минимум, для тех файлов, которые могут передаваться по сети). А поскольку FTP — это File Transfer Protocol, то логично ожидать передачи атрибутов при передаче содержимого файлов. И очень плохо, что FTP работает только с содержимым, а не с файлами как таковыми. Явно устаревший протокол уже давно пора было заменить или модернизировать.
Re[3]: FTP - момент полной закачки файла
От: Vamp Россия  
Дата: 06.02.09 15:37
Оценка:
MC>Понятие "файл" подразумевает наличие атрибутов, в число которых входит и размер (как минимум, для тех файлов, которые могут передаваться по сети). А поскольку FTP — это File Transfer Protocol, то логично ожидать передачи атрибутов при передаче содержимого файлов.

Можно было бы. Вопрос в том, что делать стандартному фтп-серверу, если файл размер файла не совпадает с заранее переданным. Удалять? Возвращать ошибку? (но кому? Соединение разорвано!) Еще неплохо было бы контрольную сумму посчитать, чтобы убедиться, что все еще и без ошибок передалось, да? А еще подписать, чтобы убедиться, что не было модицифированно посередине.
Все это очень сложные вещи, поэтому в FTP пошли по простому пути.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: FTP - момент полной закачки файла
От: Michael Chelnokov Украина  
Дата: 06.02.09 15:42
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Можно было бы. Вопрос в том, что делать стандартному фтп-серверу, если файл размер файла не совпадает с заранее переданным. Удалять? Возвращать ошибку? (но кому? Соединение разорвано!) Еще неплохо было бы контрольную сумму посчитать, чтобы убедиться, что все еще и без ошибок передалось, да? А еще подписать, чтобы убедиться, что не было модицифированно посередине.

V>Все это очень сложные вещи, поэтому в FTP пошли по простому пути.

Не такие уж и сложные для протокола с такими целями, которые стявятся перед FTP.
А для "простых путей" существует и активно применяется TFTP.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.