2009-06-23 3 views
0

Мы используем ASP.NET MVC и наши действия делает это:Как я могу проверить, что загрузка завершена?

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

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

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

ответ

1

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

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

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

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

+0

Я думаю, что это будет лучший выбор в целом, но любые другие мысли по-прежнему ценятся. –

+0

Silverlight не может этого сделать? Только Flash? –

+0

@Andrei Silverlight * может * сделать это, но в дикой природе мы не можем разумно ожидать, что пользователь уже имеет (или хочет установить) Silverlight. Однако Flash уже установлен на 99% систем. Для контролируемой аудитории Silverlight может быть отличным. В противном случае он создает излишне высокий барьер для входа для людей, чтобы использовать сайт («установите эту вещь, прежде чем вы сможете делать то, что вы на самом деле пришли сюда»). –

1

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

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

+0

Требование состоит в том, что для клиента это возможно без проблем, поэтому Silverlight отсутствует, но Flash - это возможность, меня бы интересовали любые ответы, связанные с этим. –

+0

Обновленный ответ. –

1

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

+0

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

1

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

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