Аннотация: В среде браузерных/серверных приложений загрузка различных типов файлов в браузер всегда была одной из проблем, с которыми сталкиваются пользовательские приложения для управления файлами. Существует три механизма загрузки файлов по HTTP: RFC1867, PUT и WebDAV. Распространенным методом реализации является использование нового типа, представленного в RFC1867: объекты File и ADO Stream. В этой статье обсуждаются описанные выше методы загрузки и принципы реализации, а также приводятся конкретные примеры решений.
Ключевые слова: компонент ASP, объект FILE.
В настоящее время более популярны приложения, основанные на модели браузер/сервер. Когда пользователям необходимо передать файлы на сервер, одним из распространенных методов является запуск FTP-сервера и установка каталога FTP по умолчанию для каждого пользователя в качестве домашнего веб-каталога пользователя, чтобы пользователь мог запускать клиентскую программу FTP и загружать файлы на сервер. указанный веб-каталог. Для этого пользователи должны знать, как использовать клиентскую программу FTP. Поэтому это решение доступно только опытным пользователям, знакомым с FTP. Если мы сможем интегрировать функцию загрузки файлов с Интернетом, чтобы пользователи могли выполнять задачу загрузки, используя только веб-браузер, для них это будет очень удобно. Однако из-за ограничения, заключающегося в том, что объект файловой системы может передавать только текстовые файлы, самой большой проблемой ASP является загрузка файлов. Ниже описывается, как загружать файлы на веб-страницу по протоколу HTTP.
один. Три механизма загрузки через HTTP
Существует три механизма загрузки через HTTP: RFC1867, PUT и WebDAV.
PUT — это новый глагол HTTP, представленный в HTTP 1.1. Когда веб-сервер получает HTTP PUT и имя объекта, он аутентифицирует пользователя, получает содержимое HTTP-потока и сохраняет его непосредственно на веб-сервере. Поскольку это может нарушить работу веб-сайта, он также теряет самое большое преимущество HTTP: программируемость сервера. В случае PUT сервер сам обрабатывает запрос: приложения CGI или ASP не могут вмешаться. Единственный способ для вашего приложения захватывать PUT — это работать на низком уровне — уровне фильтрации ISAPI. По соответствующим причинам применение PUT очень ограничено.
WebDAV обеспечивает распределенную аутентификацию и перевод веб-контента. В нем представлено несколько новых команд HTTP, которые позволяют загружать, блокировать/разблокировать, а также возвращать/проверять веб-контент через HTTP. «Сохранить в Интернете» в Office 2000 реализовано через WebDAV. Если вас интересует только загрузка контента, WebDAV прекрасно работает и решает множество проблем. Однако, если вам нужно загрузить файлы в ваше веб-приложение, WebDAV вам бесполезен. Как и HTTP PUT, эти команды WebDAV интерпретируются сервером, а не веб-приложением. Вам необходимо поработать над уровнем фильтрации ISAPI, чтобы получить доступ к этим командам WebDAV и интерпретировать содержимое вашего приложения.
RFC1867 ( http://www.ietf.org/rfc/rfc1867.txt ) использовался в качестве предложенного стандарта, прежде чем он был окончательно принят W3C в HTML3.2. Это очень простая, но мощная идея: определить новый тип в поле формы.
<INPUT TYPE="FILE">
И добавили разные схемы кодирования в саму форму вместо использования типичного:
<FORM ACTION="formproc.asp" METHOD="POST">,
а используя:
<FORM ACTION="formproc .asp" " METHOD="POST" ENCTYPE="multipart/form-data">
Эта схема кодирования более эффективна, чем схема кодирования формы по умолчанию "application/x-url-encoded" при передаче больших объемов данных. Гораздо выше. Кодировка URL-адреса имеет очень ограниченный набор символов. Любые символы, превышающие этот набор символов, должны быть заменены на «%nn», где nn представляет собой соответствующие две шестнадцатеричные цифры. Например, даже обычные пробельные символы следует заменять на «%20». RFC1867, с другой стороны, использует многочастное кодирование MIME, которое обычно наблюдается в сообщениях электронной почты, для передачи больших объемов данных без кодирования, но с несколькими простыми, но полезными заголовками, окружающими данные. Крупные производители браузеров используют рекомендованную кнопку «Обзор...», и пользователи могут легко использовать локальное диалоговое окно «Открыть файл...» для выбора файлов для загрузки.
RFC1867 по-прежнему оставляет большинство гибких методов загрузки файлов в ваше веб-приложение. PUT имеет очень ограниченное применение. WebDAV полезен для авторов контента, таких как пользователи FrontPage, но менее полезен для веб-разработчиков, которые хотят включить загрузку файлов в свои веб-приложения. Таким образом, RFC1867 — лучший способ включить загрузку файлов в веб-приложения.
В практических приложениях Microsoft предоставляет Posting Acceptor бесплатно. ASP не понимает схему кодирования «multipart/form-data». Вместо этого Microsoft предоставляет Posting Acceptor — приложение ISAPI, которое принимает REPOST на страницу ASP после завершения загрузки.
SA-FileUp от Software Artisans был одним из первых коммерческих компонентов Active Server. После нескольких улучшений он теперь существует как чистый компонент ASP.
два.
Основной принципанализа реализации загрузки файлов на основе ASP
: использовать метод BinaryRead объекта ADO Stream для считывания всех данных в FORM, перехвата необходимых данных файла и сохранения их как двоичный файл.
Вот пример страницы загрузки файла (upload.htm):
<html>
<тело>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Отправить" VALUE="Загрузить"></TD>
</форма>
</тело>
</html>
Объект файла используется в программе, поэтому исходные данные, считанные с помощью метода BinaryRead в Upload.asp, представляют собой не только данные самого выбранного файла, но также включают путь, тип и представление файла. на жестком диске пользователя. Описание формы доменного имени и другая сопутствующая информация страницы, поэтому нам необходимо извлечь конкретное содержимое файла. Согласно анализу, разделительной линией между информацией заголовка и данными являются две пары символов возврата каретки и перевода строки, а в конце также имеется информация разделения. Мы можем получить данные файла, используя метод, аналогичный следующему.
Тусклый FormData.FormSize, DataStart, CLStr, DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4 — длина двух пар символов возврата каретки и перевода строки.
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData — это содержимое файла.
Соответствующую обработку можно проводить по мере необходимости. Последнее, что вам нужно сделать, это сохранить файл. Есть два способа сохранения: один — использовать метод работы с двоичным файлом в таких программах, как VB или VC, добавить в проект соответствующую библиотеку типов и, наконец, скомпилировать ее в DLL-файл, а затем зарегистрировать DLL-файл при использовании это. . Процедура хранения файла следующая:
Открытая функция SaveFile(Pathname As String) As String.
Dim objContext как ObjectContext
Dim objRequest как запрос
Установите objContext=GetObjectContext()
Установить objRequest=objContext("Запрос")
'Следующий фрагмент кода относится к операциям хранения файлов Dim FormData() As Byte, CLStr, DivStr
Dim DataStart как долго, DataSize как долго
DataSize=objRequest.TotalBytes
Восстановить FormData (DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) и ChrB(10)
DataStart=InStrB(FormData,CLStr и CLStr)+4
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
'Создаем двоичный файл и записываем в него FormData. Открыть путь для двоичного файла как 1.
Поместите # 1, FormData
Закрыть #1
SaveFile="ОК!"
функции завершения
— использовать метод работы с двоичным файлом, предусмотренный в ADO STREAM. Оператор для сохранения файла: StreamOBJ.SaveToFile (имя_файла,2). В операциях такого типа мы можем хранить соответствующие операции в файле класса, а при его применении просто включать файл класса непосредственно в программу ASP. Информацию о конкретных методах обработки см. в соответствующем введении.
три. Экземпляр метода реализации загрузки файлов
может использовать компонентный или бескомпонентный метод для реализации загрузки файлов. Для категорий компонентов, например, Microsoft Posting Acceptor (сокращенно MPA) — это бесплатный серверный компонент, выпущенный Microsoft. Установка этого типа компонента также относительно удобна. Для MPA от Microsoft просто запустите его установочный файл. Для общих компонентов dll нам необходимо их зарегистрировать. Например, чтобы использовать aspcnUP.dll, вам нужно всего лишь выполнить regsvr32 [path]aspcnUP.dll в Windows 2000, и система выдаст вам сообщение об успешной регистрации, и вы сможете использовать этот компонент для классов без компонентов; например, загрузка компонента www.5xsoft.com class-upload_5xsoft. При его использовании просто включите в обработчик следующий оператор:
<!--#include FILE="upload.inc"-->
Свойства и методы работы, связанные с
созданием объекта загрузки
, см. в руководстве пользователя этого компонента.Ниже приведен исходный код для загрузки некоторых типов файлов (upload.asp), на примере компонента aspcnUP.dll:
<% @ Language="vbscript"
Установите fileUP=Server.CreateObject("aspcn.Upload")
fileUP.Maxsize=200000
fileUP.Path="d:upfile"
fileUP.Загрузить
Для i=0 в fileUP.Count
имя поля = fileUP.FieldName (i)
Если fileUP.FileType(fieldname)="zip" Или ileUP.FileType(fieldname)="rar" Тогда
fileUP.Сохранить имя поля
Конец, если
Следующий
Установить fileUP=Ничего
%>
Четыре. Заключение
Модель приложения браузер/сервер все еще быстро развивается в недавно выпущенном ASP от Microsoft. NET имеет встроенную функцию загрузки файлов, которая очень проста и удобна в использовании. Совершенно новая технология ASP. NET — это не просто обновление ASP, это совершенно новая среда веб-разработки, содержащая множество новых функций. АСП. NET предоставляет код, который легче писать и который имеет более четкую структуру. Используя эти коды, нам будет легче повторно использовать их и делиться ими, тем самым разрабатывая все больше и больше практичных программ.