Как определить, действительно ли файл был загружен и сохранен, несмотря на предварительную выборку / кэш браузера? - PullRequest
3 голосов
/ 02 мая 2011

Я создаю сценарий для сохранения статистики загрузки, но я хотел бы обновить статистику только в том случае, если файл был НАСТОЯЩИМ загружен.

Проблема заключается в том, что браузеры (например, Explorer 9, Chrome, ...) автоматически начать загрузку файла, пока диалоговое окно «сохранить / открыть» все еще открыто.Это означает, что файл может быть полностью загружен (в предполагаемую временную директорию, указанную браузером), прежде чем пользователь укажет, где его сохранить (или пока Explorer по-прежнему показывает желтую полосу предупреждений).

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

Ответы [ 3 ]

3 голосов
/ 02 мая 2011

Вы не можете делать то, что хотите. Это невозможно, по крайней мере, так, как вы просите.

То, что вы можете сделать, - это поместить некоторый код в установщик, который обращается к вашему серверу при запуске, и ваш скрипт может отслеживать его. Обычно это делается, но, безусловно, не надежно. Многие загружают программное обеспечение и устанавливают его в автономном режиме. (В частности, пользователи удаленного доступа, которых до сих пор тысячи). Кроме того, нет никакой гарантии, что установщик не будет заблокирован программным обеспечением брандмауэра или чем-то подобным.

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

Кроме того, не забывайте о множественных установках за загрузку.

0 голосов
/ 03 мая 2011

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

Теперь я не уверен, что это вполне возможно, но вы можете попытатьсяобслуживать файл через PHP вместо обычной загрузки из Apache.В PHP вы можете использовать readfile для обслуживания файла из сценария PHP.Таким образом, вы можете вызвать readfile, очистить и определить количество обслуживаемых байтов.Если это не равно количеству байтов в файле, он был прерван.Я не уверен, работает ли readfile таким образом, но стоит поэкспериментировать с ним.

Обратите внимание, что это все равно не исправит то, о чем говорил Марсель, о нажатии "Отмена" до завершения загрузки временного файла.

0 голосов
/ 02 мая 2011

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

И я предлагаю вам запомнить сайт о покупке, поэтому, если что-то пошло не так во время загрузки, пользователь может повторить попытку, не выплачивая повторно (или связавшись с администратором).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...