Как я могу проверить, что загрузка была завершена? - PullRequest
0 голосов
/ 24 июня 2009

Мы используем ASP.NET MVC, и наше действие делает это:

  • извлечение записей из БД
  • пометить записи как загруженные
  • push-архив в браузере

Теперь проблема возникает, когда загрузка по какой-то причине не завершается - возможно, пользователь нажимает кнопку «Отмена» или IE открывает эту панель безопасности загрузки. Мне интересно, есть ли альтернативное решение.

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

Ответы [ 4 ]

1 голос
/ 24 июня 2009

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

Только Flash 10 поддерживает сохранение файлов непосредственно на диск по запросу пользователя. (Предыдущие версии имели «общий объект», который больше походил на очень большое пространство для файлов cookie - не для передачи файлов, а для сохранения повторно используемых данных приложения). Прочтите здесь для получения информации о том, как взаимодействовать с файловой системой конечного пользователя через Flash 10.

По сути, есть вызов метода save(), который будет отправлять данные в выбранное пользователем место. Конкретное местоположение скрыто от вашего кода; по очевидным причинам безопасности вы просто помещаете файл в черный ящик, а Flash обрабатывает все остальное.

Единственное, чего здесь не хватает, так это о том, как загрузить ваш файл во Flash-проигрыватель, но любой, у кого есть небольшой опыт работы с Flash, не должен испытывать затруднений, выяснив это после нескольких минут исследования. Если у вас нет опыта работы с Flash, он все равно должен работать менее суток.

1 голос
/ 24 июня 2009

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

1 голос
/ 24 июня 2009

Даже проверка того, что все байты были отправлены, на самом деле ничего не гарантирует:

  • Пользователь по-прежнему может отменить загрузку перед ее сохранением, или может произойти сбой его браузера и т. Д.
  • Получатель может не являться пользователем. Это может быть прокси-сервер с антивирусным сканером, который решает заблокировать передачу и т. Д.
1 голос
/ 24 июня 2009

Я не верю, что есть. Если это необходимо, вам может потребоваться использовать элемент управления Silverlight (или вспышку) вместе с вашим приложением.

По сути, любой из этих подходов заключается в том, чтобы открыть сокет-соединение с URL-адресом HTTP и сохранить его по соответствующему пути на диске пользователя. После завершения загрузки вы можете заставить элемент управления сгенерировать хеш-значение из файла и отправить его обратно на некоторую ASP-страницу. Если значение хеша никогда не передается или является неправильным, вы знаете, что они не завершили файл.

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