2011-01-15 4 views
0

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

Это все кажется довольно простым и хорошо работает при полном доверии:
1. Запишите HttpModule, который прослушивает загрузку файлов.
2. Извлеките объект HttpWorkerRequest из контекста, используя отражение.
3.Write из потока в FileStream

Все очень хорошо, кроме того, что я получаю исключение разрешений при попытке получить HttpWorkerRequest объект из контекста в среде доверия. Использую ли я отражение или использую System.IServiceProvider.GetService(), чтобы получить объект (который явно использует отражение), я получаю ту же ошибку.

Я также попытался использовать System.Web.HttpPostedFile. Он имеет свойство InputStream. Но, похоже, этот объект загружает весь файл при инициализации, поэтому ничего хорошего.

Я устал от усталости и не могу найти другую альтернативу.

Даже если это риск для безопасности, чтобы пользователи могли иметь HttpWorkerRequest объект, безусловно, основа обеспечивает другой способ обработки потока файлов при Method = «POST» и ENCTYPE = «многочастному/форм-данных»

Любые идеи были бы замечательными
Спасибо

ответ

0

Вы также можете попробовать прочитать от context.Request.InputStream.

+0

Я дал это выстрел. В тот момент, когда я попытался прочитать() из потока, браузер загрузил весь файл. Таким образом, это разыгрывает цель. – johnDisplayClass

+0

@slightlyannoyed, как вы читаете поток? Вы не должны загружать весь поток в буфер. Вам нужно прочитать его в кусках и сразу написать куски в другой поток (например, поток файлов). –

+0

Да. Я читаю куски. 4096 байт за раз, чтобы быть конкретным. Вызов метода Read(), похоже, выполняет свою работу до тех пор, пока я не кушаю кусок. Но прежде чем он вернет этот первый фрагмент, фреймворк извлекает весь файл из браузера без моего согласия. Имеют смысл? – johnDisplayClass

Смежные вопросы