Можно ли определить, действительно ли загруженный файл
Предположим, у меня есть метод действия контроллера, который возвращает FileResult
, Можно ли определить, был ли файл полностью загружен на клиент?
public ActionResult GetFile(int id)
{
DownloadInfo data = provider.GetInfo(id);
this.provider.MarkDownloadStart(id);
return File(Server.MapPath(data.Filename), "application/pdf");
}
Я храню информацию, когда вызывается действие, но это только означает, что кто-то инициировал загрузку. Это не дает мне никакой информации на сервере, была ли загрузка завершена...
Я также установил заголовок расположения содержимого, чтобы файл, вероятно, никогда не открывался непосредственно в браузере, а браузер запрашивает его открытие / сохранение. Это облегчает для клиента сохранение файла...
Мое мышление
Я полагаю, что невозможно непосредственно определить, что загрузка действительно произошла. но возможно ли сделать это как-то иначе:
- загрузка представления,
- имеет
iframe
тот - запрашивает файл и
- основной вид контролирует загрузку на клиенте, потому что он имеет доступ к
iframe
поэтому он видит, закончил ли файл загружать или нет.
Хотя верхний сценарий может показаться осуществимым, я не знаю, как на самом деле сделать это наблюдение. Может быть, есть какой-то другой - лучший - способ выполнить эту задачу.
Основным вопросом является
Можно ли обнаружить на сервере, что клиент полностью завершил загрузку файла и не отменил его между загрузками?
2 ответа
Вы можете использовать куки. Вот пример. Вот некоторые из шагов, вовлеченных в процесс:
- На клиенте сгенерируйте какой-то уникальный идентификатор.
- Отправьте запрос в действие загрузки, передав этот уникальный идентификатор.
- Использовать
window.setInterval
регулярно запрашивать наличие cookie и проверять его значение. - Если файл cookie создан и его значение совпадает с уникальным идентификатором, загрузка завершена.
И на сервере установите значение cookie для уникального идентификатора после завершения потоковой передачи файла в ответ.
Пожалуйста, посетите этот URL
надеюсь, это поможет вам