WEB技術を活用し、B/S(ブラウザ/サーバー)構造の管理システムを実現することがOAの発展トレンドとなっています。 WEB テクノロジーに基づく管理システムは、開発サイクルが短く、インタラクティブなアプリケーションの実装が容易であり、情報を迅速かつ効率的に収集、処理、公開できるため、近年急速に発展しています。 ASP テクノロジは、その高い開発効率、優れた対話性、および強力なセキュリティにより、管理システムの開発に徐々に好まれるツールになってきました。
多くの WEB ベースのアプリケーションには、ファイルのアップロード操作が含まれます。一般的なファイル アップロード テクノロジには、HTTP プロトコルに基づくもの、VB (または DELPHI およびその他のプログラミング言語) によって開発されたファイル アップロード コンポーネントに基づくもの、などがあります。これらの手法は一般に、プログラマーがWEB技術、データベース技術、あるいはCGI技術やコンポーネント技術を同時に習得する必要があり、プログラマーに対する要求が高くなります。この記事で紹介する ASP テクノロジを使用してファイル アップロード機能を直接実装すると、プログラマは 1 つの ASP テクノロジを習得するだけで済み、プログラミングの難易度が大幅に軽減されます。
いくつかのファイル アップロード テクノロジの比較
1. HTTP プロトコルに基づく
この方法では、プログラマは DELPHI、VB などのサードパーティ ソフトウェアを使用して、最初にアプリケーション内で HTTP プロトコル プログラミングを実行し、次にファイルのコンテンツをパッケージ化する必要があります。 HTTPプロトコルの形式でアップロードされ、最後にWEBサーバーにアップロード要求メッセージを送信してファイルのアップロードを実現します。 DELPHI と VB は完全な WEB ネットワーク プログラムを作成できず、小規模な WEB アプリケーションしか作成できないため、この方法は機能が限定されたネットワーク アプリケーションにのみ使用されます。
2. VB (または DELPHI など) をベースに開発されたファイル アップロード コンポーネント
VB (または DELPHI などのプログラミング言語) を使用して、特定のファイル アップロード サービスを実装する ASP サーバー コンポーネントを開発する方法です。まず、ASP フォーム機能を使用してクライアントからサーバーにファイル (バイナリ形式) をアップロードし、次に VB で開発されたコンポーネントを使用してバイナリ ファイルを通常の読み取りおよび書き込みが可能なファイルに処理します。この方法では、プログラマは ASP 言語を習得するだけでなく、コンポーネント プログラミングに VB などのサードパーティ言語を使用する必要があり、開発の難易度が高くなります。
3.
この方法は、データベース技術に基づく以前の方法と同様です。違いは、アップロードされたバイナリ ファイルの処理にあります。データベースを使用してバイナリ ファイルを保存します。小規模データベースと大規模データベースの両方で、バイナリ データを格納するためのデータ型が提供されており、Append Chunk メソッドの対応するフィールドにデータを格納するだけです。この方法はシンプルで実行可能ですが、毎回アップロードされるファイルのサイズが異なるため、データベーススペースを大幅に浪費し、データアクセス速度が低下し、ファイルはデータベースアクセスでのみアップロードできます。多大なご迷惑をおかけしております。
分析例
ただし、ASP テクノロジを使用してファイル アップロード機能を直接実装すると、プログラマは 1 つの ASP テクノロジを習得するだけで済み、
プログラミングの難易度が大幅に軽減されます。以下に、この方法の使用方法を例を挙げて紹介します。
1. ファイル アップロード フォーム
まず、ファイル アップロード機能を提供できるフォームを作成する必要があります。プログラムは次のとおりです。
<Form action="upload.asp" method=post enctype="multipart/form-data">
ファイルをアップロードします:<入力タイプ=ファイル名=file1><br>
<input type=submit name=upload value="アップロード">
この
うち、enctype パラメータは、フォームの MIME エンコード方式を設定するために使用されます。ファイル (またはテキスト ボックスを含む) をアップロードする場合、その属性は "multipart/form-data" に設定する必要があります。 asp はサーバー側です。受信したバイナリ ファイル ストリームを処理する ASP プログラムについては、この記事の後半で紹介します。
2. アップロード ファイル形式の分析
ファイルを処理する前に、まずアップロードされたファイルの特定の形式を理解する必要があります。次の単純な ASP プログラムを作成することで、そのバイナリ コードを表示できます
。
filesize=Request.TotalBytes 'アップロードされたファイルのサイズを取得します
filedata=Request.BinaryRead(filesize) 'アップロードされたファイルのバイナリデータを取得します
Response.BinaryWrite filedata 'バイナリデータをブラウザ上に表示します
%>
ブラウザに表示されたアップロードされたファイルのバイナリ コードを分析し、コードが 4 つの部分で構成されていることを確認します (複数のファイルまたはテキスト ボックスを同時にアップロードした場合、コードはアップロード順に並べられます。形式)、各部分の内容は復帰記号と改行記号で区切られています。
1)最初の部分(開始マーク)
------------------------7d329631b04d4
2) パート 2 (ファイルの説明)
Type
: application/msword
, アップロードされたファイルのファイル名と絶対パス、およびファイルの種類を取得できます。この情報はファイルを正しく保存するために不可欠です。
3) 3 番目の部分 (ファイル コンテンツ)
は、ファイルのバイナリ コンテンツです (省略されています)。
4) 第 4 部 (エンドマーク)
------------------------7d329631b04d4
第 1 部と第 4 部の内容を見てみましょう。 ----------------------------7d329631b04d4" (アップロードするたびに値が異なります) が区切り文字の役割を果たします。これは、データの始まりと終わりをマークします (複数のアップロードがある場合)。ファイルを保存するために必要な情報に関しては、まずデータの 2 番目の部分の「ファイル名」からファイル名を取得する必要があります。次に、ファイルの開始位置を正確に特定し、最後に ASP テクノロジを使用する必要があります。バイナリファイルを元のファイル名で保存するだけです。複数のコンテンツ(複数のテキストボックスやファイルなど)を同時にアップロードした場合、各コンテンツの各部分は区切り文字に含まれて同様に処理されますが、テキストボックスとファイルの表現方法は若干異なります。これは、バイナリ コードを具体的に分析して理解することで実行できます。
3. ASP テクノロジーを使用してファイル ストレージを実装し
、ファイル コード処理をアップロードします
。 1) 区切り文字コードを取得します。
上記の分析から、区切り文字が複数のデータ セグメント (テキスト ボックスやさまざまな種類のファイルを含む) を分割する際に重要な役割を果たすことがわかっています。 )。以前に分析したように、区切り記号は最初の復帰記号と改行記号の前に表示されます。したがって、区切り文字コードは次のプログラムを通じて取得できます:
<%
newline=chrB(13) & chrB(10) '改行はバイナリの復帰文字を表します
filesize=Request.TotalBytes 'filesize はアップロードされたファイルのサイズです
filedata=Request.BinaryRead(filesize) 'filedata はアップロードされたファイルのバイナリ データです
Division=leftB(filedata,clng(instrb(filedata,newline))-1) 'divider はディバイダです
%>
注: ここでのプロセスはすべてバイナリ バイトコードであるため、すべての関数は「b」を追加したバイナリ バージョンを使用します。
2) ファイル(またはテキストボックス)の内容を取得
(1) 準備機能(バイナリ文字列を文字列に変換)
アップロードしたファイルの内容は、バイナリから文字列への変換処理を経る必要がなく、直接保存できます。 。ただし、テキスト ボックスの内容またはファイル名を抽出する必要がある場合は、変換を実行する必要があります。したがって、漢字に適した汎用変換関数を記述する必要があります。関数コードは以下のとおりです。
関数 BtoS (bstr)
そうでない場合は Null (bstr)
i = 0 から lenb(bstr) - 1 まで
bchr = midb(bstr,i+1,1)
if ascb(bchr)>127 then '中国語の文字は 2 バイトであるため、2 つの文字を一緒に処理する必要があります
temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr))
i = i+1
それ以外
temp = temp&chr(ascb(bchr))
終了の場合
次
終了の場合
BtoS=温度
終了関数
(2) ファイル(またはテキストボックス)のコンテンツを取得する
実際の WEB アプリケーションでは、アップロード操作に複数のテキストボックス、複数のファイルなどの複数のコンテンツが含まれる場合があります。ファイルとテキスト ボックスは、ファイル データに「filename=」という文字列が含まれているため、簡単に区別できます。
したがって、ファイルの内容
とテキスト ボックスの内容の両方を抽出するために使用できる次の一般的な関数を作成しました (バイナリ変換が必要です)。
記号; Final はデータの終了位置を表します。
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) '文字列 "filename" のバイナリ
bncrlf=chrb(13)&chrb(10) 'バイナリキャリッジリターン文字
startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) '開始位置
endpos = instrb(startpos,data,divider)-lenb(bncrlf) '終了位置
part1 = midb(data, startpos, endpos-startpos) '2 つのセパレータ間の内容
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' コンテンツの前の説明段落
If (instrb(firstline,filename)=0) then 'テキスト ボックスの場合は、テキスト ボックスの文字列の内容を取得します
stemp=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(stemp)
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)) 'firstlineは上記で取得した記述部分のデータ、chr(92)
急行"/"
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) 'ファイル名を取得します
%>
ASP を使用してファイル アップロード機能を直接実装します。
従来の ASP プログラマは、テキスト ファイル (.txt) に対する移動、コピー、削除などの操作にのみ使用できます。この記事で以前に紹介した方法を実行します。ただし、ASP の ADO.STREAM オブジェクトはテキスト オブジェクトとバイナリ オブジェクトを同時に操作できるようになり ( http://www.microsoft.com/dataでダウンロードできます)、これを使用してファイル アップロードを直接実装できるようになりました。 ASPの機能です。以下にその導入プロセスを紹介します。
1) STREAM オブジェクトを開きます。SREAM
オブジェクトの場合、ファイルを保存する場合は、オブジェクトの内容全体を保存する必要があります。したがって、2 つ (またはそれ以上) の STREAM オブジェクトを作成する必要があります。そのうちの 1 つは、最初のバイナリ データを受け取るソース データ ストリームであり、もう 1 つは、ソース データ ストリームから処理されたデータを受け取る宛先データ ストリームです。目的のファイルに保存します。
<%
set str=server.CreateObject("ADODB.Stream") 'str はソース データ ストリームです
str.Mode=3 'オープンモードを設定します。3は読み取りおよび書き込み可能です。
str.Type=1 'データ型を設定します。1はバイナリデータです
str.Open
set desc=server.CreateObject("ADODB.Stream") 'desc はターゲット データ ストリームです
説明モード=3
説明タイプ=1
説明開く
%>
2) STEAM オブジェクト間でコンテンツをコピーする
この部分では、ファイルを宛先データ ストリームに正しくコピーしてファイルを保存する前に、ソース データ ストリーム内のファイルの先頭を見つけてファイル コンテンツの長さを調べる必要があります。ファイルのプログラムコードは次のとおりです:
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata はアップロードされたすべてのコンテンツです
str.Write formdata 'ソース データ ストリームを割り当てる
str.position=count-lenb(result)-2 'position はファイルの先頭を指します
str.copyto desc, lenb(filecotent) 'lenb(filecontent) はファイルの長さを表します
desc.SaveToFile fullpath,2 'フルパスで指定されたパスと名前でファイルを保存します
%>
3) STEAM オブジェクトを閉じます。
プログラミングが完了
したら、以下に示すように STEAM オブジェクトを閉じて解放する必要があります。
説明を閉じる
desc=nothing を設定します
閉じる
STR=何も設定しない
%>
まとめ
本記事では、本機で開発した情報管理システムで実績のある ASP を利用したファイルアップロードを直接実装する方法を紹介します。実践により、この方法は従来のいくつかのファイル アップロード方法よりも簡単で効率的であることが証明されています。