Создание файлов из браузера - это простой способ передать файлы от клиентов на сервер. Из третьего генерационного браузера Netscape и Microsoft большинство браузеров могут загружать файлы с сервера без необходимости предоставлять пользователям специальные методы доступа или программное обеспечение.
Некоторые компоненты ASP разработаны для файлов, например ::
Публикация акцептора
(Часть Microsoft SiteServer),
Aspsmartupload (advantys),
Aspupload (PersistsSoftware),
Sa-fileupsoftware Artisants)
Начало этой статьи сообщит вам информацию о создании таких компонентов, и эти компоненты обычно используют VB, C ++ или Java.
Проблема этих компонентов заключается в том, что они являются частью сторонних продуктов, а не стандартных ASP. В качестве третьего партийного компонента установка должна быть установлена на сервере. Это означает, что DLL должен быть скопирован и зарегистрирован на сервере. Большинству систем хостинга не разрешается выполнять такие настройки на своих серверах, потому что могут возникнуть проблемы с конфигурацией (особенно виртуальные хосты). Второй недостаток заключается в том, что большинство из них не являются свободными.
Поэтому мне нужно написать код VBScript, чтобы решить проблему загрузки файла. Это не неизбежный выбор, потому что VBScript -это язык сценариев, который может использовать только тип данных вариантов и не может предоставить много встроенных функций управления бинарными данными и массивом байтов.
Чтобы понять процесс загрузки, мы должны сначала знать, что данные отправляются из браузера на сервер с помощью протокола HTTP. Это означает, что подача формы «Multipart/Form-Data» (Multi-Part/Format-Data) представлена.
Загрузить форму
При нормальных обстоятельствах используйте форму HTML для передачи данных из браузера на сервер. Эта форма может содержать текстовые домены, окно проверки, кнопки и управление типом файла загруженных файлов. Пользователь заполняет и передает эту таблицу на сервер своими собственными данными.
Атрибут EnablePe в элементе таблицы указывает тип контента, кодируемый набором данных таблицы, кодируемым на сервере. Значение по умолчанию атрибута Enctype-«Application/x-Www-Form-Urlencoded», но при передаче большого объема текста на сервер, включая данные с не ASCII или двоичными числами, этот тип по умолчанию не может быть компетентным. В настоящее время тип контента «Multipart/Form-Data» следует использовать, когда файл загружает форму.
Информация «Multipart/Form-Data» содержит ряд компонентов.
Голова контента, значение, значение «Форма-дата»;
Для управления типом файла одна часть может содержать больше информации:
Атрибуты FileName (имя файла) исходного пути и имени файла предусмотрены на клиенте;
Следуйте по контролю бинарного или текстового содержания за этими головами.
Следующий пример иллюстрирует кодирование «Multipart/Form-Data».
Если эта форма отправлена, вы можете прочитать эти запросы на сервере:
----------------------------- 7CF87224D2020A
Контент-дискуссия: форм-дата;
[Электронная почта защищена]
----------------------------- 7CF87224D2020A
Контент-дискуссия: Form-Data;
Тип контента: Image/PJPEG
----------------------------- 7CF87224D2020A
Контент-дискуссия: форм-дата;
отправить запрос
----------------------------- 7CF87224D2020A--
Когда этот контент передается как ответ на клиента, оно будет отображаться. Request.binaryRead и response.binaryWrite Метод прочтения и записи бинарных данных.
< / Процент
Response.binaryWrite (request.binaryRead (request.totalbytes)))
%>
Вы можете увидеть разделение каждой части ответа:
----------------------------- 7CF87224D2020A
Последняя граничная линия следует ' -'.
Каждый элемент управления имеет контент-динамичность. Распознавание атрибута имени контролируется таблицей HTML (электронная почта, Blob и Enter. Для управления типом файла (Blob),
Имя файла также является частью заголовка дискозирования головы, а заголовок типа контента дает тип контента двоичных данных.
Загруженный скрипт
Все вышеперечисленное содержимое должно быть связано. Это очень очевидно в VB или C ++, потому что для этого есть много объектов и методов. В VBScript необходимо использовать некоторые функции, предоставленные языком, и должна быть решена проблема двойной кодированной строки переменной, используемой в VBScript.
Функция VBScript
Исходные данные представляют собой двоичный формат, поэтому необходимо использовать функцию VBScript, разработанную для управления двоичными данными. Потому что мы рассматриваем исходные данные как строки байтов, полезны функции MIDB, Instrb и Lenb. Но избегайте классической строки VBScript, потому что они представляют собой двойную строку, которая не подходит для разложения на одиночные байты.
Это единственные функции, используемые для разложения байтов в функции VBScript. Метод также требуется для получения двойной кодированной строки из разложенных данных, чтобы вы могли использовать строку в кодировании VBScript. Чтобы использовать строку в качестве независимой переменной в Instrb, необходима функция для преобразования двойной строки в одну строку.
Для меня я написал две функции, getString () и GetbyTestring (), а затем объяснил это позже.
структура
Разлагаемые данные хранятся в объекте словаря VBScript. Словарный объект - это хэш -табличный объект, который хранит (ключ, элемент). Это часть VBScript и ASP2.0.
Определите первый словарный объект "uploadRequest". Этот объект содержит все элементы управления, представленные таблицей загрузки. Ключом является управление элементом управления, а элемент - это информация управления, содержащуюся в объекте:
«ControlName1», Dictionary Control1
«ControlName2», Dictionary Control2
Представление контролируемого словарного объекта содержит следующую (ключ, элемент) пару:
«Значение», строка или двоичный контент
«Имя файла», имя загруженного файла
"ContentType", ContentType загруженного файла
Сочетая их, есть следующие примеры:
uploadRequest: «Электронная почта», uploadControl 1: «Значение», [Электронная почта защищена]
«Blob», UploadControl 2: «имя файла», C: /Upload/200902/file.gif "ContentType":
Изображение/GIF "Значение": GIF89AI?
Этот объект очень полезен для будущего доступа и использования данных.
авария
Вот код для разложения, чтения и записи управления загрузкой. Этот процесс завершен с помощью программы «BuilduploadRequest».
sub builduploadRequest (requestbin)
Прежде всего, вы должны найти разделительную линию.
'Получите границу posbeg = 1 posend = instrb
боу
|||