ブラウザからファイルを作成することは、クライアントからサーバーにファイルを渡す簡単な方法です。 3番目のGeneration Browser NetscapeとMicrosoftから、ほとんどのブラウザーは、ユーザーに特別なアクセス方法やソフトウェアを提供することなく、サーバーからファイルをアップロードできます。
一部のASPコンポーネントは、ファイル用に設計されています。たとえば、::
アクセプターの投稿
(MicrosoftSiteserverの一部)、
aspsmartupload(Advantys)、
aspupload(pstestsoftware)、
sa-fileupsoftware Artisants)
この記事の冒頭では、このようなコンポーネントの作成に関する情報が表示され、これらのコンポーネントは通常VB、C ++、またはJavaを使用します。
これらのコンポーネントの問題は、それらが標準的なASPではなく第3パーティ製品の一部であることです。 3番目のパーティコンポーネントとして、サーバーにインストールをインストールする必要があります。これは、DLLをコピーしてサーバーに登録する必要があることを意味します。構成の問題(特に仮想ホスト)が発生する可能性があるため、ほとんどのホスティングシステムはサーバーでそのような設定を実行することはできません。 2番目の欠点は、それらのほとんどが無料でない場合、必要に応じてカスタマイズできないことです。
したがって、ファイルをアップロードする問題を解決するには、VBScriptコードを記述する必要があります。 vbscriptはスクリプト言語であり、バリアントデータ型のみを使用でき、バイナリデータとバイト配列の管理の多くの構築された関数を提供することはできないため、これは避けられない選択ではありません。
アップロードのプロセスを理解するには、最初にデータがHTTPプロトコルを使用してブラウザからサーバーに送信されることを知る必要があります。これは、「MultiPart/Form-Data」(Multi-Part/Format-Data)のフォーム提出が送信されることを意味します。
フォームをアップロードします
通常の状況では、HTMLフォームを使用して、ブラウザからサーバーにデータを渡します。このフォームには、アップロードされたファイルのテキストドメイン、検査ボックス、ボタン、およびファイルタイプ制御が含まれる場合があります。ユーザーは、このテーブルを自分のデータでサーバーに記入して送信します。
テーブル要素のenableype属性は、サーバーにエンコードされたテーブルデータセットによってエンコードされたコンテンツタイプを指定します。 Enctype属性のデフォルト値は「Application/x-www-form-urlencoded」ですが、非ASSASCII文字またはバイナリ番号を持つデータを含む大量のテキストをサーバーに送信する場合、このデフォルトタイプは有能ではありません。この時点で、ファイルがフォームをアップロードするときに「MultiPart/Form-Data」コンテンツタイプを使用する必要があります。
「MultiPart/Form-Data」情報には、各コンポーネントが含まれます。
コンテンツ拡張ヘッド、「フォームダタ」の値(名前)属性を指定します。
ファイルタイプコントロールの場合、1つの部分にはより多くの情報が含まれている場合があります。
Filename(ファイル名)元のパスとファイル名の属性は、バイナリデータコントロール(コンテンツタイプ)ヘッダーによって制御される接続データに規定されています。
これらのヘッドの後ろのコントロールバイナリまたはテキストコンテンツに従ってください。
次の例は、「MultiPart/Form-Data」のエンコードを示しています。
このフォームが送信された場合、これらのリクエストをサーバーで読むことができます。
------------------------------- 7CF8724D2020A
コンテンツ拡張:form-data;
[保護された電子メール]
------------------------------- 7CF8724D2020A
コンテンツ拡張:form-data;
コンテンツタイプ:画像/PJPEG
------------------------------- 7CF8724D2020A
コンテンツ拡張:form-data = "Enter"
クエリを送信します
----------------------------- 7CF8724D2020A-
そのコンテンツがクライアントへの応答として送信されると、表示されます。 request.binaryreadおよびresponse.binarywriteメソッドバイナリデータの読み取りと書き込み。
< /パーセント
respons.binarywrite(request.binaryread(request.totalbytes)))
%>
応答の各部分の分割を見ることができます。
------------------------------- 7CF8724D2020A
最後の境界線は「 - 」に続きます。
各コントロールにはコンテンツ拡張があります。名前属性認識は、HTMLテーブルによって制御されます(電子メール、BLOB、ENTER。 ファイルタイプコントロール(BLOB)の場合、
ファイル名もヘッドディスポジションヘッダーの一部であり、コンテンツタイプのヘッダーはコンテンツタイプのバイナリデータを提供します。
アップロードされたスクリプト
上記のすべての内容をリンクする必要があります。これには多くのオブジェクトと方法があるため、これはVBまたはC ++で非常に明白です。 VBScriptでは、言語によって提供されるいくつかの関数を使用する必要があり、VBScriptで使用されるデュアルエンコードされた変数文字列の問題を解決する必要があります。
vbscript関数
元のデータはバイナリ形式であるため、バイナリデータを管理するために設計されたVBScript関数を使用する必要があります。元のデータをバイトの文字列と見なしているため、MIDB、instrB、およびLENB関数は有用であるためです。 ただし、VBScriptのクラシック文字列は、単一バイトに分解するのに適していないデュアル - エンコード文字列であるため、避けてください。
これらは、VBScript関数のバイトを分解するために使用される唯一の関数です。また、VBScriptエンコードで文字列を使用できるように、分解されたデータからデュアルエンコードされた文字列を取得するには、メソッドも必要です。文字列をInstrBの独立変数として使用するには、デュアル - バイト文字列を単一の文字列に変換するために関数が必要です。
私のために、私は2つの関数、getString()とgetByTestring()を書き、後で説明しました。
構造
分解されたデータは、VBScript辞書オブジェクトに保存されます。辞書オブジェクトは、保存するハッシュテーブルオブジェクトです(キー、アイテム)。 VBScriptとASP2.0の一部です。
最初の辞書オブジェクト「uploadRequest」を定義します。このオブジェクトには、アップロードテーブルで提出されたすべてのコントロールが含まれています。キーはコントロールの制御であり、アイテムはオブジェクトに含まれるコントロール情報です。
「controlname1」、辞書Control11
「controlname2」、辞書Control2
制御された辞書オブジェクトを表すには、次の(キー、アイテム)ペアが含まれています。
「値」、文字列またはバイナリコンテンツ
「ファイル名」、アップロードされたファイルの名前
「ContentType」、アップロードされたファイルのContentType
これらを組み合わせて、次の例があります。
uploadRequest: "email"、uploadcontrol 1: "value"、[電子メール保護]
「Blob」、uploadControl 2: "Filename"、C:/upload/200902/file.gif "contentType":
画像/gif "value":gif89ai?
このオブジェクトは、将来のアクセスと使用データに非常に役立ちます。
壊す
分解、読み取り、および記録のアップロードコントロールのコードを次に示します。このプロセスは、「BuilduploadRequest」プログラムで完了します。
Sub BuildUploadRequest(requestbin)
まず、分割線を見つける必要があります。
'boundary posbeg = 1 posend = instrbを取得します
bou
|||