Задержка файловых операций ASP.net - PullRequest
0 голосов
/ 07 января 2010

Хорошо, вот в чем проблема: я читаю поток из элемента управления FileUpload, читаю порциями по n байтов и записываю массив в цикле, пока не достигну конца потока.

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

Однако, когда я загружаю файл с удаленного компьютера, я не вижу его, пока файл не завершит загрузку. Кроме того, я добавил еще один вызов, чтобы записать прогресс в текстовый файл по мере продвижения, и я получаю то же самое. Локальный: файл обновляется по мере загрузки, удаленный: файл маркера появляется только после завершения загрузки (что несколько бесполезно, так как он мне нужен, пока загрузка все еще происходит).

Существует ли какая-либо настройка безопасности (или ASP.net), которая может сохранять файлы во временном расположении для удаленных компьютеров, а не на локальном компьютере, и затем перемещать их в указанное место назначения? Я бы сравнил это с ASP.net, отображающим сообщения об ошибках при просмотре с локального компьютера (даже на общедоступном имени хоста), в отличие от универсальной страницы ошибок компиляции / универсальной страницы исключений, которая отображается при просмотре с удаленного компьютера (а customErrors - нет). выкл)

Есть какие-нибудь подсказки по этому поводу?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 08 января 2010

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

0 голосов
/ 07 января 2010

FileUpload элемент управления отображается как <input type="file"> элемент HTML; Таким образом, ваш браузер откроет этот файл, прочитает ВСЕ содержимое, закодирует и отправит его.

Ваш запрос ASP.NET запускается только после того, как IIS получает все данные браузера.

Таким образом, вам потребуется кодировать клиентский компонент (Flash, Java-апплет, Silverlight), чтобы отправить файл небольшими порциями и перестроить его на стороне сервера.

РЕДАКТИРОВАТЬ: Некоторая информация на MSDN :

Чтобы контролировать, будет ли файл для загрузки временно сохраняться в памяти или на сервере во время обработки запроса, установите атрибут requestLengthDiskThreshold элемента httpRuntime. Этот атрибут позволяет вам управлять размером буфера входного потока. По умолчанию это 256 байт. Указанное вами значение не должно превышать значение, указанное вами для атрибута maxRequestLength.

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