|
|
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
Добрый день, друзья! Тут пришло такое требование. Приложение - тонкий клиент. Пользователь может заказать генерацию отчета. Когда отчет готов, появляется ссылка на файл. Пользователь кликает на ссылку - начинает скачиваться отчет. Так вот заказчик хочет наверняка знать, скачал пользователь отчет полностью, или отменил закачку? Мне с лету на ум пришло такое решение. В сервлете, где мы отдаем файл в HttpResponse, можно создать нашу обертку вокруг output stream. Обертка эта будет проверять, все байты были считаны или нет. Соответственно - все пользователь скачал, или нет. Правда, есть два "но": 1. Как отследить момент когда пользователь отменил закачку? Ждать по таймауту? Если долго не считываются файлы из outputstream, то считать, что закачка отменена. Но как долго ждать, опять же? 2. Браузер же может быть умным, для ускорения процесса - начать скачивать файл фоном, пока пользователь думает куда скачать и вообще, качать ли. И если файл маленький, то он может успеть полностью скачаться в кеш браузера прежде чем пользователь нажмет Cancel. Что думаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 13:45 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiterМне с лету на ум пришло такое решение. В сервлете, где мы отдаем файл в HttpResponse, можно создать нашу обертку вокруг output stream. Обертка эта будет проверять, все байты были считаны или нет. Соответственно - все пользователь скачал, или нет. Обертки есть готовые в Apache Commons IO. Но, если пользователь прервет передачу, а сервер ещё не всё отправил, то на сервере, возможно исключение сгенерируется. Поэтому какой смысл от обертки Stream. Что она делать будет? rabiterПравда, есть два "но": 1. Как отследить момент когда пользователь отменил закачку? Ждать по таймауту? Если долго не считываются файлы из outputstream, то считать, что закачка отменена. Но как долго ждать, опять же? 2. Браузер же может быть умным, для ускорения процесса - начать скачивать файл фоном, пока пользователь думает куда скачать и вообще, качать ли. И если файл маленький, то он может успеть полностью скачаться в кеш браузера прежде чем пользователь нажмет Cancel. Что думаете? Вопросы верные. А что если пользователь скачал файл, но решил его не открывать? Как вариант, можно использовать какой-нибудь готовый компонент для скачивания файла на JavaScript, который бы отсылал на сервер подтверждение, после окончания загрузки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 13:54 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczОбертки есть готовые в Apache Commons IO. Но, если пользователь прервет передачу, а сервер ещё не всё отправил, то на сервере, возможно исключение сгенерируется. Поэтому какой смысл от обертки Stream. Что она делать будет? Да, я подозревал, что есть что-то подобное, не искал только еще. Смысл обертки - быть уверенным в том, что мы отдали все байты. Хотя, надо проверить, если сервер выбросит исключение при разрыве, то этого будет достаточно и никакая обертка не нужна, конечно же. BlazkowiczВопросы верные. А что если пользователь скачал файл, но решил его не открывать? Как вариант, можно использовать какой-нибудь готовый компонент для скачивания файла на JavaScript, который бы отсылал на сервер подтверждение, после окончания загрузки. Вот это интересно! Спасибо за идею. Правда, теперь, возможно, придется это все реализовывать. Я-то надеялся отнекаться ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 14:11 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczКак вариант, можно использовать какой-нибудь готовый компонент для скачивания файла на JavaScript, который бы отсылал на сервер подтверждение, после окончания загрузки. Только я не совсем понял, разве javascript может контролировать скачку файла? Уведомить сервер конечно можно из javascript. Но разве процесс скачки файла не сугубо дело внутренних механизмов самого браузера? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 14:18 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiterТолько я не совсем понял, разве javascript может контролировать скачку файла? Уведомить сервер конечно можно из javascript. Но разве процесс скачки файла не сугубо дело внутренних механизмов самого браузера? Есть варианты http://stackoverflow.com/a/9669324 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 14:22 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
BlazkowiczrabiterТолько я не совсем понял, разве javascript может контролировать скачку файла? Уведомить сервер конечно можно из javascript. Но разве процесс скачки файла не сугубо дело внутренних механизмов самого браузера? Есть варианты http://stackoverflow.com/a/9669324 Спасибо. Правда, выглядит слишком извращенно. Боюсь, что на некоторых браузерах может не работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 14:37 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiter, может не работать. На фоксе есть: - очередность закачки - приостановить закачку ... А отладку-тест на вычитку байтов клиентом не ставил? Работает? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 14:53 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiter, п.п.1 - листенер на конец сесии ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 14:55 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
Petro123, Ничего не понял ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 14:58 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiterPetro123, Ничего не понял вверху твой вопрос п.п.1. При отдаче мы знаем сколько отдали. Конец события сколько всего отдали байт на событие - Конец сессии юзверя. Так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:03 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
Petro123rabiterPetro123, Ничего не понял вверху твой вопрос п.п.1. При отдаче мы знаем сколько отдали. Конец события сколько всего отдали байт на событие - Конец сессии юзверя. Так? Все, я понял. Т.е. если к концу своей сессии пользователь не считал весь поток, то будем считать, что закачка оборвана. Да, тут понятно. Но все равно, остается еще проблема со п.п.2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:12 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiter, п.2 не понял. Они все умные и качают фоном. А что я потом буду делать с файлом - не твоё, сервера дело) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:15 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
Petro123, Не мое дело, так-то да. Но вот такой сценарий: файл размером 10 кб. Пользователь кликает на скачку. В браузере появляется окошко куда сохранить. Пользователь думает, и нажимает Cancel. А файл-то маленкий, браузер, пока пользователь думал, уже мигом скачал его (правда зря скачал - пользователь отказался от download). И вот такую ситуацию на сервере не отследить - браузер слишком умный. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:25 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiterPetro123, Не мое дело, так-то да. Но вот такой сценарий: файл размером 10 кб. Пользователь кликает на скачку. В браузере появляется окошко куда сохранить. Пользователь думает, и нажимает Cancel. А файл-то маленкий, браузер, пока пользователь думал, уже мигом скачал его (правда зря скачал - пользователь отказался от download). И вот такую ситуацию на сервере не отследить - браузер слишком умный. imho 1. проверь этот кейс и напиши тут 2. доложи шефу, что такая слежка в таких случаях неуместна \ дорогая \ требует письменного приказа (шутка) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:31 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiter, ммммм а разве скачка буфера идёт до нажатия ОК? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:34 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiterА файл-то маленкий, браузер, пока пользователь думал, уже мигом скачал его я про фоновый процесс имел ввиду ПОСЛЕ кнопки ОК. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:35 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
Petro123rabiter, ммммм а разве скачка буфера идёт до нажатия ОК? Да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:36 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, прикольно... Я думал, какой нибудь MIME заголовок......( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 15:41 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
rabiterМне с лету на ум пришло такое решение. В сервлете, где мы отдаем файл в HttpResponse, можно создать нашу обертку вокруг output stream. Обертка эта будет проверять, все байты были считаны или нетЗачем такие сложности? Ставим out.flush() после out.write(buffer) и если catch не ловит исключение - клиенту отдано всё. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 17:05 |
|
||
|
Убедиться в том, что пользователь скачал файл полностью.
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovrabiterМне с лету на ум пришло такое решение. В сервлете, где мы отдаем файл в HttpResponse, можно создать нашу обертку вокруг output stream. Обертка эта будет проверять, все байты были считаны или нетЗачем такие сложности? Ставим out.flush() после out.write(buffer) и если catch не ловит исключение - клиенту отдано всё. Действительно. Меня почему-то переклинило, что out.write(buffer) асинхронно отрабатывает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.08.2014, 17:38 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38728153&tid=2126696]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
195ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 535ms |

| 0 / 0 |
