Тенденцией развития автоматизации делопроизводства является использование WEB-технологий для реализации системы управления со структурой B/S (браузер/сервер). Системы управления, основанные на WEB-технологиях, быстро развиваются в последние годы, поскольку имеют короткий цикл разработки; просты в реализации интерактивных приложений и могут быстро и эффективно собирать, обрабатывать и публиковать информацию; Технология ASP постепенно стала предпочтительным инструментом для разработки систем управления благодаря своей высокой эффективности разработки, хорошей интерактивности и высокой безопасности.
Многие веб-приложения включают в себя операции загрузки файлов. Общие технологии загрузки файлов включают: на основе протокола HTTP; на основе компонентов загрузки файлов, разработанных VB (или DELPHI и других языков программирования, основанных на технологии баз данных и т. д.); Эти методы обычно требуют от программистов одновременного владения WEB-технологией, технологией баз данных, технологией CGI или технологией компонентов, а также предъявляют более высокие требования к программистам. Использование технологии ASP для непосредственной реализации функции загрузки файлов, о которой будет рассказано в этой статье, требует от программистов лишь владения одной технологией ASP, что значительно снижает сложность программирования.
Сравнение нескольких технологий загрузки файлов
1. На основе протокола HTTP.
Этот метод требует, чтобы программисты использовали стороннее программное обеспечение, такое как DELPHI, VB и т. д., чтобы сначала выполнить программирование по протоколу HTTP в приложении, а затем упаковать содержимое файла. для загрузки в формате протокола HTTP и, наконец, отправляет сообщение с запросом на загрузку на веб-сервер для загрузки файла. Поскольку DELPHI и VB не могут писать полные сетевые программы WEB и могут писать только небольшие WEB-приложения, этот метод используется только для сетевых приложений с ограниченными функциями.
2. Компонент загрузки файлов, разработанный на основе VB (или DELPHI и т. д.).
Этот метод использует VB (или язык программирования DELPHI и т. д.) для разработки серверных компонентов ASP для реализации конкретных служб загрузки файлов. Сначала он использует функцию формы ASP для загрузки файлов (двоичный формат) с клиента на сервер, а затем использует компоненты, разработанные VB, для обработки двоичных файлов в файлы, которые можно нормально читать и записывать. Этот метод требует от программистов не только владения языком ASP, но и использования сторонних языков, таких как VB, для компонентного программирования, что увеличивает сложность разработки.
3.
Этот метод аналогичен предыдущему методу, основанному на технологии баз данных. Разница заключается в обработке загруженных двоичных файлов. Он использует базу данных для сохранения двоичных файлов. Как небольшие, так и большие базы данных предоставляют типы данных для хранения двоичных данных. Просто сохраните данные в соответствующих полях метода Append Chunk. Хотя этот метод прост и осуществим, поскольку размер загружаемого файла каждый раз разный, это приведет к большой трате места в базе данных и снижению скорости доступа к данным, и файл можно будет загрузить только в среде доступа к базе данных. причиняя большие неудобства.
Пример анализа
Однако использование технологии ASP для непосредственной реализации функции загрузки файлов требует от программиста только владения одной технологией ASP, что
значительно снижает сложность программирования. Ниже мы покажем, как использовать этот метод на примере.
1. Форма загрузки файла.
Сначала вам нужно написать форму, которая будет обеспечивать функцию загрузки файлов. Программа выглядит следующим образом:
<Form action="upload.asp" метод=post enctype="multipart/form-data">.
Загрузить файл:<Тип ввода=имя файла=file1><br>
<тип ввода=имя отправки=значение загрузки="Загрузить">
</form>
Среди них параметр enctype используется для установки метода кодирования MIME формы. При загрузке файла (или содержащего текстовое поле) для его атрибута должно быть установлено значение «multipart/form-data». asp — серверная часть. Программа ASP, обрабатывающая полученный поток двоичных файлов, будет представлена далее в этой статье.
2. Анализ формата загружаемого файла
. Прежде чем обрабатывать файл, мы должны сначала понять конкретный формат загружаемого файла. Мы можем просмотреть его двоичный код, написав следующую простую программу ASP:
<%.
png=Request.TotalBytes 'Получить размер загруженного файла
filedata=Request.BinaryRead(filesize) 'Получить двоичные данные загруженного файла
Response.BinaryWrite filedata 'Отображение двоичных данных в браузере
%>
Проанализируйте двоичный код загруженного файла, отображаемый в браузере, и обнаружите, что код состоит из четырех частей (если одновременно загружается несколько файлов или текстовых полей, коды располагаются в порядке загрузки с одинаковым формате), а содержимое каждой части разделено символами возврата каретки и перевода строки:
1) Первая часть (начальный знак)
--------------------------7d329631b04d4
2) Часть 2 (описание файла)
Content-Disposition: form-data; name="file1"; filename="C:Documents and SettingsAdministratorMy DocumentsInvitation.doc" Content-Type: application/msword
in Следовательно , мы можем получить имя файла и абсолютный путь к загруженному файлу, а также тип файла. Эта информация необходима для правильного сохранения файла.
3) Третья часть (содержимое файла)
— это двоичное содержимое файла, опущено.
4) Часть 4 (Знак окончания)
--------------------------7d329631b04d4
Давайте посмотрим на содержание Части 1 и Части 4, "-- ------------------------------7d329631b04d4" (значение каждый раз разное) играет роль разделителя, Он отмечает начало и конец фрагмента данных (при наличии нескольких загрузок). Что касается информации, необходимой для сохранения файла, нам сначала нужно получить имя файла из «имени файла» второй части данных, затем нам нужно правильно определить начальную позицию файла и, наконец, использовать технологию ASP. сохранить двоичный файл с исходным именем. Вот и все. Если одновременно загружается несколько материалов (например, несколько текстовых полей и файлов), они обрабатываются одинаково. Каждая часть содержимого включается в разделитель, но текстовые поля и файлы выражаются немного по-разному. Это можно сделать, специально проанализировав его двоичный код, чтобы понять.
3. Используйте технологию ASP для реализации хранения файлов
и обработки кода файла
. 1) Получите код разделителя.
Из приведенного выше анализа мы уже знаем, что разделитель играет важную роль в разделении нескольких сегментов данных (включая текстовые поля и различные типы файлов). ) . Как было проанализировано ранее, разделитель появляется перед первым символом возврата каретки и перевода строки. Следовательно, код разделителя можно получить с помощью следующей программы:
<%
newline=chrB(13) & chrB(10) 'новая строка представляет двоичный символ возврата каретки
size=Request.TotalBytes 'filesize — размер загруженного файла.
filedata=Request.BinaryRead(filesize) 'filedata — это двоичные данные загруженного файла.
diver=leftB(filedata,clng(instrb(filedata,newline))-1) 'divider — это разделитель
%>
Примечание. Поскольку все процессы здесь представляют собой двоичные байт-коды, все функции используют свои двоичные версии с добавлением «b».
2) Получить содержимое файла (или текстового поля)
(1) Подготовительная функция (преобразование двоичной строки в строку)
Содержимому загруженного файла не требуется проходить процесс преобразования из двоичного файла в строку, и его можно сохранить напрямую . Однако если вам необходимо извлечь содержимое текстового поля или имя файла, необходимо выполнить преобразование. Поэтому необходимо написать универсальную функцию преобразования, подходящую для китайских иероглифов. Ниже приведен код функции:
Функция BtoS (bstr)
Если не является нулевым (bstr), то
для i = 0 до lenb(bstr) - 1
bchr = Midb(bstr,i+1,1)
If ascb(bchr)>127 Тогда 'Китайские иероглифы представляют собой двухбайтовые символы, поэтому два символа должны обрабатываться вместе
temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr))
я = я+1
Еще
температура = температура&chr(ascb(bchr))
Конец, если
следующий
Конец, если
BtoS=температура
Конечная функция
(2) Получение содержимого файла (или текстового поля).
В реальных веб-приложениях операция загрузки может включать в себя множественное содержимое, например несколько текстовых полей, несколько файлов и т. д. Файлы и текстовые поля легко отличить. Данные файла содержат строку «filename=". Поэтому мы написали следующую общую функцию, которую можно использовать для извлечения как содержимого файла, так и содержимого текстового поля (требуется двоичное преобразование):
Функция getdata(byval data, byval dir, Final) 'data представляет собой двоичную строку, представляющую деление; символ Final представляет конечную позицию данных;
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'Двоичный файл строки "filename" express
bncrlf=chrb(13)&chrb(10) 'Двоичный символ возврата каретки
startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) 'Начальная позиция
endpos = instrb(startpos,data, делитель)-lenb(bncrlf) 'Конечная позиция
part1 = Midb(data, startpos, endpos-startpos) 'Содержимое между двумя разделителями
firstline = middleb(part1, 1, instrb(part1, bncrlf)-1) ' Абзац описания перед содержимым
If (instrb(firstline,filename)=0) then 'Если это текстовое поле, получить содержимое строки текстового поля
стемп=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata = BtoS (стемп)
Else 'Если это файл, получить двоичное содержимое файла
Getdata=midb (part1, instrb (part1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (part1)
-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
Конец, если
Финал=конечная позиция
Конечная функция.
Вызовите эту функцию непосредственно в программе, чтобы получить содержимое необходимого файла (или текстового поля), как показано ниже:
<%
Content=getdata (данные, разделитель, позиция)
%>
3) Получение имени файла было проанализировано ранее. Поле «filename=" потока данных загруженного файла содержит имя и абсолютный путь к файлу. Вообще говоря, нам нужно только извлечь имя файла из пути. Ниже приведен код программы:
<%.
namepos=instrrev(B2S(firstline),chr(92)) 'первая строка — это данные части описания, полученные выше, chr(92)
выражать"/"
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) 'Получить имя файла
%>
Используйте ASP для непосредственной реализации функции загрузки файлов.
Традиционные программисты ASP могут использовать объект FILESYSTEMOBJECT только для перемещения, копирования, удаления и других операций с текстовыми файлами (.txt). Если вам нужно обрабатывать двоичные объекты, вам придется использовать его. методы, представленные ранее в этой статье. Однако теперь объект ADO.STREAM в ASP может одновременно работать с текстовыми и двоичными объектами (можно загрузить по адресу http://www.microsoft.com/data ), и вы можете использовать его для непосредственной реализации загрузки файлов. функция в ASP. Ниже мы представляем процесс его реализации.
1) Откройте объект ПОТОК.
Для объекта ПОТОК, если вы хотите сохранить файл, вы должны сохранить все содержимое объекта. Следовательно, мы должны создать два (или более) объекта STREAM, один из которых является потоком исходных данных, который получает исходные двоичные данные, другой — потоком данных назначения, который получает обработанные данные из потока исходных данных, и, наконец, сохранить в нужный файл.
<%
set str=server.CreateObject("ADODB.Stream") 'str — поток исходных данных
str.Mode=3 'Установить открытый режим, 3 доступен для чтения и записи
str.Type=1 'Установите тип данных, 1 — двоичные данные.
ул.Открытая
set desc=server.CreateObject("ADODB.Stream") 'desc — целевой поток данных
desc.Mode=3
Описание.Тип=1
описание.Открыть
%>
2) Копирование содержимого между объектами STEAM.
В этой части вы должны найти начало файла в исходном потоке данных и узнать длину содержимого файла, прежде чем вы сможете правильно скопировать файл в целевой поток данных и сохранить file Код программы следующий:
<%.
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata — это весь загруженный контент
str.Write formdata 'Назначить поток исходных данных
str.position=count-lenb(result)-2 'позиция указывает на начало файла
str.copyto desc, lenb(filecotent) 'lenb(filecontent) представляет длину файла
desc.SaveToFile fullpath,2 'Сохраните файл с путем и именем, указанными в полном пути.
%>
3) Закройте объект STEAM.
После завершения программирования объект STEAM должен быть закрыт и освобожден, как показано ниже:
<%.
Описание Закрыть
Установить описание = ничего
Ул. Закрыть
Установить STR=ничего
%>
Резюме
В этой статье представлен метод непосредственной реализации загрузки файлов с помощью ASP, который хорошо применяется в системе управления информацией, разработанной этим модулем. Практика доказала, что этот метод проще и эффективнее некоторых традиционных способов загрузки файлов.