- 締切済み
ASPでデータベースに画像を保存
ASP+SQLServer7.0でデータベースに画像を保存し、それを呼び出して表示できるようにしたいのですが 具体的にどうすればいいのかが分かりません。 フォルダに画像を保存することは出来ています。 image型にバイナリデータを保存するのではないかと何となく考えてはいるのですが良く分かりません。 よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- nama11
- ベストアンサー率66% (2/3)
basp21をinstallし 1、バイナリアップロード 2、採りこみ(指定fieldへ) basp21の入手先は下記のサイトへ http://www.hi-ho.ne.jp/babaq/basp21.html
- 7659
- ベストアンサー率66% (4/6)
VB.NET,ADO.NETで記述されたサンプルですね。当初の記載したサンプルと基本的には同様の操作となります。 ご希望のSQL分でハンドリングするのであれば、前述のWRITEXTを利用せざるえないと思います。 後、私の情報が古いところもあり、KBで http://support.microsoft.com/kb/258038/ja Streamオブジェクトを利用したADOのサンプルがありました。 こちらご覧ください。StreamオブジェクトにはWriteメソッドがありこちらでByte配列を渡せますので、うまくいくと思いますよ。
補足
「途中経過」 とりあえずDBへ書き込む事ができました。 後は、正しく書き込まれているか表示してみようと思います。 <%@ LANGUAGE = VBSCRIPT %> <% Const adOpenKeyset = 1 Const adLockOptimistic = 3 Const adTypeBinary=1 set cn = Server.CreateObject("ADODB.Connection") cn.Open "Provider=SQLOLEDB;User ID=sa;Password='';Data Source=athlon2500;Initial Catalog=test1" set rs = Server.CreateObject("ADODB.Recordset") rs.Open "select MAX(IMAGE_ID) AS ID from test1",cn,adOpenKeyset, adLockOptimistic if rs.EOF then id=1 else id=rs("ID")+1 end if br = Request.BinaryRead(Request.TotalBytes) set bobj = Server.CreateObject("basp21") bPicture = bobj.FormBinary(br,"File1") set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = cn cmd.CommandText = "INSERT INTO test1(IMAGE_ID,IMAGE) VALUES(" & id & ",?)" cmd.Parameters(0).Value = bPicture cmd.Execute set cmd = Nothing rs.Close cn.Close %> <html> <body> <% set mstream = Server.CreateObject("ADODB.Stream") mstream.Type = adTypeBinary mstream.Open mstream.LoadFromFile Server.MapPath("sample.jpg") Response.BinaryWrite(mstream.Read) mstream.Close %> </body> </html> --------------------------------------------- 参考URL: http://www.shoeisha.com/mag/windev/pdf/870511/windev0511_162_SQLServer.pdf --------------------------------------------
- 7659
- ベストアンサー率66% (4/6)
T-SQLでとなると、ちょっと経験はありませんが、確か、WRITETEXTがText、Image型のポインタへの書き込みに利用できるのでT-SQLのヘルプで確認してみてください。
補足
ASPで使用できるのかわかりませんが、FileStream オブジェクトとバイト配列を使用して、Microsoft SQL Server からファイルに BLOB データを読み取る方法および書き込む方法を見つけました。 これをSQL文で使用できればと思うのですが・・・。 http://support.microsoft.com/default.aspx?scid=kb;ja;308042
- 7659
- ベストアンサー率66% (4/6)
VBSではなく、VBのサンプルになりますが、 Private Sub SaveToDB() Dim bytBLOB() As Byte Dim strImagePath As String Dim intNum As Integer 'Save the record strImagePath = Trim$(txtImagePath.Text) With rs .Fields("ImageTitle") = _ Trim$(txtImageTitle.Text) If (optImageType(0).Value) Then 'Save as file pointer .Fields("ImagePath") = strImagePath Else If (txtImagePath.Text <> "") Then 'Open the picture file intNum = FreeFile Open strImagePath For Binary As #intNum ReDim bytBLOB (FileLen(strImagePath)) 'Read data and close file Get #intNum, , bytBLOB Close #1 'Store the BLOB .Fields("ImagePath") = "" .Fields("ImageBLOB").AppendChunk bytBLOB End If End If .Update End With End Sub
補足
出来ればSQL文の中で使用したいと思っているのですが無理でしょうか。 (例) INSERT INTO TABLE(IMAGE_ID,IMAGE) VALUES(No,Binary)
- 7659
- ベストアンサー率66% (4/6)
あまり時間がないので、簡単に。 image型のフィールドにバイナリデータを保存するということで可能です。ADOにはBLOBを操作するためにAppendChunk、GetChunkというメソッドがありますのでこちらをヘルプで調べてみてください。参考にVBのFormアプリから、該当の操作をするサンプルをのせておきます。
補足
HTMLのフォーム(ENCTYPE="multipart/form-data")で入力された画像をBASP21のメソッドFormBinaryを使って1バイトの配列にセットしています。 bPicture = bobj.FormBinary(br,"File1") この後、AppendChunkでデータベースに保存すると思うのですが、使い方が理解できませんでした。 サンプルコードなどありましたら紹介していただけないでしょうか。
補足
回答ありがとうございます。 BASP21のメソッドFormBinaryを使っていると書いていたのですがそれとは意味がちがうのでしょうか?