純ASP上傳圖像文件到數據庫的最佳例子


IAmTrue 發表於2000-11-2 7:56:49 ASP地帶


getfile.htm
-------------------------

  1. <html>
  2.  
  3. <head>
  4.         <title>保存圖片到數據庫</title>
  5. </head>
  6.  
  7. <body>
  8.         <b>
  9.  
  10.         <p></b>你可以找個圖片試試,保存完畢後會有提示</p>
  11.  
  12.         <form METHOD="POST" ENCTYPE="multipart/form-data" ACTION="savetodb.asp">
  13.                 <p>Email : <input NAME="email" VALUE="wangcq@sina.com" size="20"><br>
  14.                 Picture : <input TYPE="file" NAME="blob"><br>
  15.                 <input TYPE="submit" NAME="Enter"> </p>
  16.         </form>
  17. </body>
  18. </html>


savetodb.asp
----------------------------------

  1. <%
  2.  
  3. Response.Buffer = TRUE
  4. Response.Clear
  5. byteCount = Request.TotalBytes
  6.  
  7. RequestBin = Request.BinaryRead(byteCount)
  8. Dim UploadRequest
  9. Set UploadRequest = CreateObject("Scripting.Dictionary")
  10.  
  11. BuildUploadRequest RequestBin
  12.  
  13. email = UploadRequest.Item("email").Item("Value")
  14.  
  15. contentType = UploadRequest.Item("blob").Item("ContentType")
  16. filepathname = UploadRequest.Item("blob").Item("FileName")
  17. filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))
  18. picture = UploadRequest.Item("blob").Item("Value")
  19.  
  20. 'Response.ContentType = contentType
  21. 'Response.binaryWrite picture
  22.  
  23. set objCn = server.createobject("adodb.connection")
  24.         set objRst = server.createobject("adodb.recordset")
  25.                 objCn.Open "upload"
  26.                 objrst.Open "pic", objcn, 1,3,2
  27.                 objrst.addnew
  28.                 objrst.fields("filename")=filename
  29.                 objrst.fields("type")="gif"
  30.  
  31.                 objrst.fields("what").appendchunk picture
  32.                 objrst.update
  33.                 response.write "<a href=showpic.asp?id=" & objrst("id") & ">第" & objrst("id") & "個圖片。</a>"
  34.                 objrst.close
  35.  
  36.                 objCn.close
  37.         set objrst=nothing
  38. set objcn = nothing
  39. %>
  40. <!--#include file="upload.asp"-->


showpic.asp
----------------------------------------

  1. <%
  2. set objCn = server.createobject("adodb.connection")
  3.         set objRst = server.createobject("adodb.recordset")
  4.                 objCn.Open "upload"
  5.                         objrst.Open "select what from pic where id=" & request("id"), objcn
  6.  
  7.                         if not objrst.eof then
  8.                                 response.binarywrite objrst("what")
  9.                         end if
  10.  
  11.                         objrst.close
  12.                 objCn.close
  13.         set objrst=nothing
  14. set objcn = nothing
  15. %>



upload.asp
-------------------------------------------

  1. <%
  2. Sub BuildUploadRequest(RequestBin)
  3.         'Get the boundary
  4.         PosBeg = 1
  5.         PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
  6.         boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
  7.         boundaryPos = InstrB(1,RequestBin,boundary)
  8.         'Get all data inside the boundaries
  9.         Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))
  10.                 'Members variable of objects are put in a dictionary object
  11.                 Dim UploadControl
  12.                 Set UploadControl = CreateObject("Scripting.Dictionary")
  13.                 'Get an object name
  14.                 Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))
  15.                 Pos = InstrB(Pos,RequestBin,getByteString("name="))
  16.                 PosBeg = Pos+6
  17.                 PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
  18.                 Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
  19.                 PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))
  20.                 PosBound = InstrB(PosEnd,RequestBin,boundary)
  21.                 'Test if object is of file type
  22.                 If PosFile<>0 AND (PosFile<PosBound) Then
  23.                         'Get Filename, content-type and content of file
  24.                         PosBeg = PosFile + 10
  25.                         PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))
  26.                         FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
  27.                         'Add filename to dictionary object
  28.                         UploadControl.Add "FileName", FileName
  29.                         Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))
  30.                         PosBeg = Pos+14
  31.                         PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))
  32.                         'Add content-type to dictionary object
  33.                         ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
  34.                         UploadControl.Add "ContentType",ContentType
  35.                         'Get content of object
  36.                         PosBeg = PosEnd+4
  37.                         PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
  38.                         Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)
  39.                 Else
  40.                         'Get content of object
  41.                         Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))
  42.                         PosBeg = Pos+4
  43.                         PosEnd = InstrB(PosBeg,RequestBin,boundary)-2
  44.                         Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))
  45.                 End If
  46.                 'Add content to dictionary object
  47.                 UploadControl.Add "Value" , Value
  48.                 'Add dictionary object to main dictionary
  49.                 UploadRequest.Add name, UploadControl
  50.                 'Loop to next object
  51.                 BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)
  52.         Loop
  53.  
  54. End Sub
  55.  
  56. 'String to byte string conversion
  57. Function getByteString(StringStr)
  58.         For i = 1 to Len(StringStr)
  59.                 char = Mid(StringStr,i,1)
  60.                 getByteString = getByteString & chrB(AscB(char))
  61.         Next
  62. End Function
  63.  
  64. 'Byte string to string conversion
  65. Function getString(StringBin)
  66.         getString =""
  67.         For intCount = 1 to LenB(StringBin)
  68.                 getString = getString & chr(AscB(MidB(StringBin,intCount,1)))
  69.         Next
  70. End Function
  71. %>


test.mdb(dsn 名稱:upload)
----------------------------------------
表pic:
id:自動加
filename:文本
type:文本
what:ole

-----------------------------------------
存成單個文件,放在一個目錄下,打開(必須用http://...)getfile.htm
上傳一個.gif或.jpg就可以顯示了。
對於大文件在顯示程序(showpic.asp)中可能會用到循環和getchunk方法。自己去做。記住,由於ASP目前暫時不支持二進行制讀寫,只能存二進制到數據庫中。
有什麼問題,請致電veryblue@chinese.com (IAmTrue)
-----------------------------------------------------------------






[本日志由 FindSome 于 2014-08-06 06:02 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: asp 圖片 上傳
相關日誌:

评论: 0 | 引用: 0 | 查看次数: 17722
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 关闭