Есть ли способ «заглянуть» в файл, когда он загружается через HTTP в окно Windows? - PullRequest
2 голосов
/ 19 марта 2010

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

Ответы [ 2 ]

1 голос
/ 19 марта 2010

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

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

Edit:

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

Ну ... это было бы очень трудно сделать, и это могло бы не работать кросс-браузерно, но это могло бы быть сделано с этим подходом.

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

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

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

Итак, как я уже сказал, он сложен и может быть ошибочным кросс-браузерным, но теоретически это может быть сделано.

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

0 голосов
/ 19 марта 2010

Существует метод HTTP HEAD, но не PEEK.

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

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

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