powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Убедиться в том, что пользователь скачал файл полностью.
20 сообщений из 20, страница 1 из 1
Убедиться в том, что пользователь скачал файл полностью.
    #38728068
rabiter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день, друзья!

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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