Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Убедиться в том, что пользователь скачал файл полностью. / 20 сообщений из 20, страница 1 из 1
25.08.2014, 13:45
    #38728068
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
Добрый день, друзья!

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

Мне с лету на ум пришло такое решение. В сервлете, где мы отдаем файл в HttpResponse, можно создать нашу обертку вокруг output stream. Обертка эта будет проверять, все байты были считаны или нет. Соответственно - все пользователь скачал, или нет.

Правда, есть два "но":
1. Как отследить момент когда пользователь отменил закачку? Ждать по таймауту? Если долго не считываются файлы из outputstream, то считать, что закачка отменена. Но как долго ждать, опять же?
2. Браузер же может быть умным, для ускорения процесса - начать скачивать файл фоном, пока пользователь думает куда скачать и вообще, качать ли. И если файл маленький, то он может успеть полностью скачаться в кеш браузера прежде чем пользователь нажмет Cancel.

Что думаете?
...
Рейтинг: 0 / 0
25.08.2014, 13:54
    #38728075
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiterМне с лету на ум пришло такое решение. В сервлете, где мы отдаем файл в HttpResponse, можно создать нашу обертку вокруг output stream. Обертка эта будет проверять, все байты были считаны или нет. Соответственно - все пользователь скачал, или нет.

Обертки есть готовые в Apache Commons IO. Но, если пользователь прервет передачу, а сервер ещё не всё отправил, то на сервере, возможно исключение сгенерируется. Поэтому какой смысл от обертки Stream. Что она делать будет?

rabiterПравда, есть два "но":
1. Как отследить момент когда пользователь отменил закачку? Ждать по таймауту? Если долго не считываются файлы из outputstream, то считать, что закачка отменена. Но как долго ждать, опять же?
2. Браузер же может быть умным, для ускорения процесса - начать скачивать файл фоном, пока пользователь думает куда скачать и вообще, качать ли. И если файл маленький, то он может успеть полностью скачаться в кеш браузера прежде чем пользователь нажмет Cancel.
Что думаете?
Вопросы верные. А что если пользователь скачал файл, но решил его не открывать? Как вариант, можно использовать какой-нибудь готовый компонент для скачивания файла на JavaScript, который бы отсылал на сервер подтверждение, после окончания загрузки.
...
Рейтинг: 0 / 0
25.08.2014, 14:11
    #38728095
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
BlazkowiczОбертки есть готовые в Apache Commons IO. Но, если пользователь прервет передачу, а сервер ещё не всё отправил, то на сервере, возможно исключение сгенерируется. Поэтому какой смысл от обертки Stream. Что она делать будет?
Да, я подозревал, что есть что-то подобное, не искал только еще. Смысл обертки - быть уверенным в том, что мы отдали все байты. Хотя, надо проверить, если сервер выбросит исключение при разрыве, то этого будет достаточно и никакая обертка не нужна, конечно же.

BlazkowiczВопросы верные. А что если пользователь скачал файл, но решил его не открывать? Как вариант, можно использовать какой-нибудь готовый компонент для скачивания файла на JavaScript, который бы отсылал на сервер подтверждение, после окончания загрузки.
Вот это интересно! Спасибо за идею. Правда, теперь, возможно, придется это все реализовывать. Я-то надеялся отнекаться ;-)
...
Рейтинг: 0 / 0
25.08.2014, 14:18
    #38728104
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
BlazkowiczКак вариант, можно использовать какой-нибудь готовый компонент для скачивания файла на JavaScript, который бы отсылал на сервер подтверждение, после окончания загрузки.
Только я не совсем понял, разве javascript может контролировать скачку файла? Уведомить сервер конечно можно из javascript. Но разве процесс скачки файла не сугубо дело внутренних механизмов самого браузера?
...
Рейтинг: 0 / 0
25.08.2014, 14:22
    #38728109
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiterТолько я не совсем понял, разве javascript может контролировать скачку файла? Уведомить сервер конечно можно из javascript. Но разве процесс скачки файла не сугубо дело внутренних механизмов самого браузера?
Есть варианты
http://stackoverflow.com/a/9669324
...
Рейтинг: 0 / 0
25.08.2014, 14:37
    #38728126
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
BlazkowiczrabiterТолько я не совсем понял, разве javascript может контролировать скачку файла? Уведомить сервер конечно можно из javascript. Но разве процесс скачки файла не сугубо дело внутренних механизмов самого браузера?
Есть варианты
http://stackoverflow.com/a/9669324
Спасибо. Правда, выглядит слишком извращенно. Боюсь, что на некоторых браузерах может не работать.
...
Рейтинг: 0 / 0
25.08.2014, 14:53
    #38728149
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiter,
может не работать. На фоксе есть:
- очередность закачки
- приостановить закачку
...
А отладку-тест на вычитку байтов клиентом не ставил?
Работает?
...
Рейтинг: 0 / 0
25.08.2014, 14:55
    #38728153
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiter,
п.п.1 - листенер на конец сесии
...
Рейтинг: 0 / 0
25.08.2014, 14:58
    #38728155
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
Petro123,

Ничего не понял
...
Рейтинг: 0 / 0
25.08.2014, 15:03
    #38728158
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiterPetro123,

Ничего не понял
вверху твой вопрос п.п.1.
При отдаче мы знаем сколько отдали.
Конец события сколько всего отдали байт на событие - Конец сессии юзверя.
Так?
...
Рейтинг: 0 / 0
25.08.2014, 15:12
    #38728169
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
Petro123rabiterPetro123,

Ничего не понял
вверху твой вопрос п.п.1.
При отдаче мы знаем сколько отдали.
Конец события сколько всего отдали байт на событие - Конец сессии юзверя.
Так?

Все, я понял. Т.е. если к концу своей сессии пользователь не считал весь поток, то будем считать, что закачка оборвана. Да, тут понятно.
Но все равно, остается еще проблема со п.п.2.
...
Рейтинг: 0 / 0
25.08.2014, 15:15
    #38728173
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiter,
п.2 не понял.
Они все умные и качают фоном.
А что я потом буду делать с файлом - не твоё, сервера дело)
...
Рейтинг: 0 / 0
25.08.2014, 15:25
    #38728187
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
Petro123,

Не мое дело, так-то да. Но вот такой сценарий: файл размером 10 кб. Пользователь кликает на скачку. В браузере появляется окошко куда сохранить. Пользователь думает, и нажимает Cancel. А файл-то маленкий, браузер, пока пользователь думал, уже мигом скачал его (правда зря скачал - пользователь отказался от download). И вот такую ситуацию на сервере не отследить - браузер слишком умный.
...
Рейтинг: 0 / 0
25.08.2014, 15:31
    #38728193
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiterPetro123,

Не мое дело, так-то да. Но вот такой сценарий: файл размером 10 кб. Пользователь кликает на скачку. В браузере появляется окошко куда сохранить. Пользователь думает, и нажимает Cancel. А файл-то маленкий, браузер, пока пользователь думал, уже мигом скачал его (правда зря скачал - пользователь отказался от download). И вот такую ситуацию на сервере не отследить - браузер слишком умный.
imho
1. проверь этот кейс и напиши тут
2. доложи шефу, что такая слежка в таких случаях неуместна \ дорогая \ требует письменного приказа (шутка)
...
Рейтинг: 0 / 0
25.08.2014, 15:34
    #38728199
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiter,
ммммм
а разве скачка буфера идёт до нажатия ОК?
...
Рейтинг: 0 / 0
25.08.2014, 15:35
    #38728205
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiterА файл-то маленкий, браузер, пока пользователь думал, уже мигом скачал его
я про фоновый процесс имел ввиду ПОСЛЕ кнопки ОК.
...
Рейтинг: 0 / 0
25.08.2014, 15:36
    #38728207
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
Petro123rabiter,
ммммм
а разве скачка буфера идёт до нажатия ОК?
Да.
...
Рейтинг: 0 / 0
25.08.2014, 15:41
    #38728217
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
Blazkowicz,
прикольно...
Я думал, какой нибудь MIME заголовок......(
...
Рейтинг: 0 / 0
25.08.2014, 17:05
    #38728323
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
rabiterМне с лету на ум пришло такое решение. В сервлете, где мы отдаем файл в HttpResponse, можно создать нашу обертку вокруг output stream. Обертка эта будет проверять, все байты были считаны или нетЗачем такие сложности?
Ставим out.flush() после out.write(buffer) и если catch не ловит исключение - клиенту отдано всё.
...
Рейтинг: 0 / 0
25.08.2014, 17:38
    #38728367
rabiter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Убедиться в том, что пользователь скачал файл полностью.
Basil A. SidorovrabiterМне с лету на ум пришло такое решение. В сервлете, где мы отдаем файл в HttpResponse, можно создать нашу обертку вокруг output stream. Обертка эта будет проверять, все байты были считаны или нетЗачем такие сложности?
Ставим out.flush() после out.write(buffer) и если catch не ловит исключение - клиенту отдано всё.

Действительно. Меня почему-то переклинило, что out.write(buffer) асинхронно отрабатывает.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Убедиться в том, что пользователь скачал файл полностью. / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]