У меня есть чувствительные файлы для загрузки на пользователей, и каждому пользователю разрешают загрузить данный файл точно однажды. Если загрузка перестала работать, я хочу разрешить перезагрузку, но не иначе.
Не достаточно полагаться на вход/обработку запроса загрузки файла в сервере - я должен знать детерминировано, когда файл завершен и на месте в клиенте, начиная со многих из моей пользовательской работы в среде с частыми отбрасываниями возможности соединения.
Самый простой путь к этому для работы состоял бы в том, если бы браузер выставил "файл, сохраненный" событие от Сохранения как... диалоговое окно, которое могло быть соединено проводом к функции JavaScript на странице загрузки (который мог отправить назад на сервер). Но, интуиция предполагает, что могли бы быть дыры в системе безопасности, если бы браузеры выставили эту функциональность, поскольку она крадется несколько вне песочницы. Я не уверен, что это даже возможно.
Я найденный несколько другое вопросы в этой области, но ничто об этой проблеме конкретно.
Какие-либо идеи?
Править: Я не должен был использовать слово "безопасность" в исходном вопросе, жаль об инициировании отвлекающих маневров.
Редактирование 2: Моя "безопасность", формулирующая введенных в заблуждение людей в offtopic технические проблемы безопасности, но вы оба подтвердили мое подозрение что "нет, нет никакой поддержки браузера для этого". Я отмечаю первого комментатора с ответом, так как его первое предложение имело то, что я искал. Спасибо все.
В JavaScript нет такого события браузера, и даже если оно было, вы не можете доверять браузеру пользователя в обеспечении безопасности.
Лучше использовать GUID для создания уникального URL-адреса для каждой загрузки. Затем вы можете, например:
Позвольте мне прояснить последний пункт. Допустим, вы используете Java - вы будете in.read (buffer)
и out.write (buffer)
в цикле до EOF. Если клиент отключается, вы получите исключение IOException
во время out.write ()
и сможете отличить успешную загрузку от прерванной. На других платформах, я уверен, есть способы узнать, потеряна связь или нет.
РЕДАКТИРОВАТЬ: На самом деле вы можете запустить событие браузера, используя прием, описанный в принятом ответе на один из вопросов, которые вы связали с . Однако это не было бы надежным решением для ограничения количества загрузок.
Почему важно, чтобы файл мог скачать "ровно один раз"? После загрузки файл может быть скопирован, так что действительно ли существует проблема безопасности, позволяющая одному и тому же пользователю загружать файл более одного раза?
Если нет, не могли бы вы сделать что-то вроде этого:
Конечный результат:
Если вас это действительно беспокоит, регистрируйте каждый запрос на загрузку и запускайте запланированный отчет для файлов, которые были загружены более одного раза. Если что-то выглядит подозрительно, вы можете изучить журналы безопасности, поговорить с пользователем и т. Д.