Отслеживание момента окончания скачивания файла с сервера

tri777ki

Новичок
Отслеживание момента окончания скачивания файла с сервера

Клиент проходит аутентификацию на сайте, затем на одной из страниц сайта кликает на линк и начинает скачивать некий zip файл с сервера по http. Как на сервере можно отследить момент, когда клиент докачает файл полностью? (Именно полностью, а не момент, когда прекратится скачивание, например по причине обрыва связи).
 

kruglov

Новичок
в общем случае никак.

-~{}~ 20.03.07 18:06:

А если этот юзер 2 раза файл скачает, то бизнес накроется? Давайте ему на скачивание определенное время.
 

tri777ki

Новичок
Накрыться-то не накроется, но всё-таки не хотелось бы несколько раз давать возможность скачивания. Грубо говоря оплатил одно скачивание - получай. Хочешь скачать два раза - плати другую сумму.
Хотя, видимо, так и придется, давать определенное время. Но тогда надо предусматривать обработку ситации, когда юзер оплатил скачивание и не успел скачать в отведенное время. Хотя такое и нечасто может быть, если время побольше сделать, но всё-таки. Просто первый вариант был бы универсальным.
 

iceman

говнокодер
напиши прогу, и обязуй юзеров качать через нее. вот она и будет отсылать тебе информацию о завершнение скачки...
 

tri777ki

Новичок
А может в качестве такой проги может выступать некий JavaScript, встроенный в страницу, с которой юзер нажимает линк на скачивание файла? В JavaScript не силен, поэтому хотелось бы узнать - возможно ли в принципе? Тогда пользователь ничего бы и не заметил.
 

Bitterman

Новичок
tri777ki
Не думаю, что это возможно. В любом случае, пользователь может отключить JavaScript, и что тогда?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: kruglov
в общем случае никак.
А какие, собственно, непреодолимые трудности ты видишь в "транзите" скачиваемого файла через скрипт с сохранением результата?

Надо написать обработку заголовка Range, игнорировать обрыв соединения, проверять соединение в каждой итерации, записывать статус, помнить скачаные области (чтоб reget с 5ю потоками мог работать). В общем случае возможно, но не для новичков.

Автору - ответ на вопрос "как обеспечить докачку" стоит поискать в FAQ.
 

kruglov

Новичок
grigori
Тем, что не удастся на 100% гарантировать, что получатель файл таки получил полностью. А там, где вопрос касается денежных разборок, гарантии должны быть более существенными.

То, что сервер байт отдал, вовсе не значит, что он записался юзеру на диск.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: kruglov
grigori
Тем, что не удастся на 100% гарантировать, что получатель файл таки получил полностью. А там, где вопрос касается денежных разборок, гарантии должны быть более существенными.
Вопрос не про отношения с клиентами, мы ничего не знаем об их Terms of Service.
Человек не спрашивал, как лучше организовать работу с клиентами.
Можно давать 2 или 3 попытки, можно по запросу техподержке открывать доступ заново, можно много чего.

То, что сервер байт отдал, вовсе не значит, что он записался юзеру на диск.
Вопрос не про запись на диск. Во время записи может вырубится свет и система рухнет - но мы не рассматриваем эту проблему.

Можно отследить технический факт скачивания, факт сохранения данных на диске отследить невозможно. Я об этом.
 

kruglov

Новичок
grigori
То, что сервер байт отдал, вовсе не значит, что он дошел до клиентского компьютера
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Думаю, что если проверка соединения после отдачи данных дает положительный результат, можно считать, что данные доставлены.
Не по udp ж отдаем.
От битых данных никто не застрахован.
 

kruglov

Новичок
На http://xpoint.ru несколько лет назад была большая дискуссия насчет возможности гарантии того, что посетитель файл полностью скачал (в рамках протокола HTTP).

Решили, что никак это невозможно, о чем в тамошнем FAQ упоминание есть.
 

tri777ki

Новичок
Понятно. Т.е. и JavaScript не поможет. Просто если бы помог, поставить на сайте пометку о том, что для загрузки файла требуется JavaScript и соответствующее уведомление в случае его отсутствия с предложением установить, думаю, не такая большая проблема.
 

iceman

говнокодер
если он не включит, то сможет качать его сколько угодно...

на уровне HTTP не получится этого реализовать, пиши отдельную программу... либо возможно есть уже готовые, обратись за консультацией к другим, бизнесс которых схожен с твоим..
 

atv

Новичок
kruglov, и не только в рамках HTTP, 100% гарантии вообще дать невозможно, только отправив файл, скачанный клиентом, обратно на проверку :) Тем не менее, отдача файла скриптом, не самый плохой вариант решения задачи.
 

bgm

 
Полезная статья:
Контролируемое скачивание:

* для отдельных категорий пользователей скорость скачивания должна быть ограничена
* система должна быть в курсе, когда скачивание успешно завершено

http://www.softwaremaniacs.org/blog/2006/04/18/controlled-download/
 

Bermuda

Новичок
Давайте ему на скачивание определенное время.
А время можно начать отсчитывать с начала первого скачивания. Взять максимально-медленное соединение, посчитать время скачивания, помножить его эдак на 10.
 
Сверху