ASP
でファイルのアップロード †
このドキュメントは、ASP
でのファイルアップロード方法と、
アップロードした情報をMS SQL Server
に格納、取得する方法を記します。
テスト環境 †
アップロードしたファイルをDB(MSSQL
)に格納する †
BASP21のサンプルソースには、アップロードしたファイルを所定のフォルダに保存するコードがあります。=
これを参考に、アップロードしたファイルをデータベースに格納する情報を以下に記します。
アップロード用テーブル定義 †
CREATE TABLE IMG
(
ID INTEGER IDENTITY(1,1) NOT NULL PRIMARY KEY,
FILENAME TEXT,
DATA IMAGE
)
go
HTML
コード(upload.html) †
<HTML>
<BODY>
<FORM ACTION="upload.asp" ENCTYPE="multipart/form-data" METHOD=POST>
ファイル: <INPUT TYPE=file NAME="file"><BR>
<INPUT TYPE=SUBMIT NAME=UPLOAD>
</FORM>
</BODY>
</HTML>
ASP
コード(upload.asp) †
oCn.Open "DSN=db;UID=sa;PWD=admin" は環境により変更してください
<%@ LANGUAGE = VBSCRIPT %>
<%
Set oBASP = Server.CreateObject("basp21")
Set oCn = Server.CreateObject("ADODB.Connection")
Set oRs = CreateObject("ADODB.Recordset")
postData = Request.BinaryRead(Request.TotalBytes)
nFileSize = oBASP.FormFileSize(postData,"file")
szFileName = Mid(oBASP.FormFileName(postData,"file"), InstrRev(oBASP.FormFileName(postData,"file"),"\")+1)
fileData = oBASP.FormBinary(postData, "file")
oCn.Open "DSN=db;UID=sa;PWD=admin"
oRs.Open "IMG", oCn, 1, 3 ' adOpenKeyset = 1, adLockOptimistic = 4
oRs.AddNew
oRs.fields("filename") = szFileName
oRs.fields("data") = fileData
oRs.Update
oRs.Close
Set oRs = Nothing
oCn.Close
Set oCn = Nothing
%>
<HTML>
<BODY>
アップロード完了!<BR>
ファイル名: <%= szFileName %><BR>
</BODY>
</HTML>
以上のテーブル定義、HTML、ASPでファイルのアップロードが出来ます
アップロードしたファイルの取り出し(getdata.asp) †
このドキュメントで定義したIMGテーブルには、プライマリキーとしてIDカラムが定義されています。
上記のプログラム(ASP)を実行すると、IDカラムに値が格納されます。(インクリメントされた値)
この値を元に<A HREF>..</A>によるダウンロードを可能にさせます。
すなわちHTMLなどに
<A HREF="getdata.asp?id=1">ID=1のデータをダウンロード</A>
という感じになります。
<%@ LANGUAGE = VBSCRIPT %>
<%
Set oCn = Server.CreateObject("ADODB.Connection")
Set oCmd = Server.CreateObject("ADODB.Command")
id = Request.QueryString("id")
szSQL = "SELECT * FROM img WHERE id = " + id
oCn.Open "DSN=db;UID=sa;PWD=admin"
oCmd.ActiveConnection = oCn
oCmd.CommandText = szSQL
Set oRs = oCmd.Execute
Response.ContentType = "application/octet-stream"
Response.AddHeader "content-disposition", "attachment; filename=""" + oRs.fields("filename") + """"
Response.BinaryWrite oRs.fields("data")
Response.End
Set oCmd = Nothing
oRs.Close
Set oRs = Nothing
oCn.Close
Set oCn = Nothing
%>
画像として表示した場合 †
上記ソースのgetdata.aspを以下のように修正(MIMEタイプがgifの場合)
Response.ContentType = "image/gif"
Response.AddHeader "content-disposition", "inline; filename=""" + oRs.fields("filename") + """"
HTML側は
<IMG SRC="getdata.asp?id=1">
となります。