Есть ли способ «подсмотреть» файл во время его загрузки через HTTP в компьютер Windows?

StackOverflow https://stackoverflow.com/questions/2479390

Вопрос

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

Это было полезно?

Решение

Похоже, вы хотите избежать «белого экрана смерти» при загрузке больших файлов.Если да, возможно, вы захотите изучить Элемент управления RadUpload от Telerik , который отображает индикатор выполнения во время загрузки.

Если вы хотите создать свой собственный, я бы декомпилировал их пробную копию для идей.Я таким образом просмотрел их исходный код, и они отображают индикатор выполнения с помощью комбинации специального HttpModule и HttpHandler вместе со своим элементом управления.Обработчик маршрутизирует файл в потоковом режиме, в то время как модуль предоставляет информацию о «проценте завершения» — или наоборот;прошло несколько лет с тех пор, как я смотрел на это.

Редактировать:

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

Хорошо...это будет очень сложно сделать, и это может не работать в разных браузерах, но с помощью этого подхода это можно сделать.

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

Проблема в следующем:во время загрузки файла вы больше не сможете взаимодействовать на основе HTML.Публикация должна продолжаться, иначе загрузка не удастся.Элемент управления, на который я ссылаюсь, вообще работает только потому, что большинство браузеров позволяют javascript продолжать выполнять и обновлять DOM страницы во время публикации.

Поэтому, чтобы это работало, вам необходимо обновить некоторые стандартизированные состояния на стороне сервера во время обработки файлов в HttpModule, которые передаются обратно клиенту через вызовы XmlHttpRequest, обрабатываемые HttpHandler.Вам нужно использовать чистый javascript/DOM для обновления пользовательского интерфейса пользователя.

Итак, как я уже сказал, это сложно и, вероятно, будет глючить в кроссбраузерности, но теоретически это можно сделать.

Существуют альтернативы, которые могут быть более стабильными, но не обязательно осуществимыми:вы можете создать элемент управления ActiveX или приложение Click-Once .NET, которое предварительно обрабатывает файл перед загрузкой и, возможно, даже асинхронно передает файл, пока пользователь продолжает просмотр.Некоторым пользователям этот вариант может не понравиться, и я не знаю подробностей вашего сценария развертывания, но это вариант.

Другие советы

Есть HTTP HEAD метод, но не PEEK.

HEAD предоставит вам информацию и заголовки о файле.

Конечно, вы можете создать специальный обработчик запросов, который будет делать все, что вы захотите.Вам не обязательно работать со статическими ресурсами, вы можете динамически создавать любой ответ, какой захотите.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top