繁体中文
设为首页
加入收藏
当前位置:ASP技术首页 >> ASP应用 >> 纯ASP上传图像文件到数据库的最佳例子

纯ASP上传图像文件到数据库的最佳例子

2006-02-15 08:00:00  作者:  来源:互联网  浏览次数:0  文字大小:【】【】【
简介:  原作者: IAmTrue ------------------------- 保存图片到数据库 你可以找个图片试试,保存完毕后会有提示  Email :  Picture :   savetodb.asp ----------------------------------

  原作者: IAmTrue

-------------------------

保存图片到数据库

你可以找个图片试试,保存完毕后会有提示

 

Email :

 Picture :

 

savetodb.asp

----------------------------------

<%

Response.Buffer = TRUE

Response.Clear

byteCount = Request.TotalBytes

RequestBin = Request.BinaryRead(byteCount)

Dim UploadRequest

Set UploadRequest = CreateObject("Scripting.Dictionary")

BuildUploadRequest RequestBin

email = UploadRequest.Item("email").Item("Value")

contentType = UploadRequest.Item("blob").Item("ContentType")

filepathname = UploadRequest.Item("blob").Item("FileName")

filename = Right(filepathname,Len(filepathname)-InstrRev(filepathname,"\"))

picture = UploadRequest.Item("blob").Item("Value")

'Response.ContentType = contentType

'Response.binaryWrite picture

set objCn = server.createobject("adodb.connection")

set objRst = server.createobject("adodb.recordset")

objCn.Open "upload"

objrst.Open "pic", objcn, 1,3,2

objrst.addnew

objrst.fields("filename")=filename

objrst.fields("type")="gif"

objrst.fields("what").appendchunk picture

objrst.update

response.write "第" & objrst("id") & "个图片。"

objrst.close

objCn.close

set objrst=nothing

set objcn = nothing

%>

showpic.asp

----------------------------------------

<%

set objCn = server.createobject("adodb.connection")

set objRst = server.createobject("adodb.recordset")

objCn.Open "upload"

objrst.Open "select what from pic where id=" & request("id"), objcn

if not objrst.eof then

  response.binarywrite objrst("what")

end if

objrst.close

objCn.close

set objrst=nothing

set objcn = nothing

%>

upload.asp

-------------------------------------------

<%

Sub BuildUploadRequest(RequestBin)

  'Get the boundary

  PosBeg = 1

  PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))

  boundary = MidB(RequestBin,PosBeg,PosEnd-PosBeg)

  boundaryPos = InstrB(1,RequestBin,boundary)

  'Get all data inside the boundaries

  Do until (boundaryPos=InstrB(RequestBin,boundary & getByteString("--")))

    'Members variable of objects are put in a dictionary object

    Dim UploadControl

    Set UploadControl = CreateObject("Scripting.Dictionary")

    'Get an object name

    Pos = InstrB(BoundaryPos,RequestBin,getByteString("Content-Disposition"))

    Pos = InstrB(Pos,RequestBin,getByteString("name="))

    PosBeg = Pos+6

    PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))

    Name = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))

    PosFile = InstrB(BoundaryPos,RequestBin,getByteString("filename="))

    PosBound = InstrB(PosEnd,RequestBin,boundary)

    'Test if object is of file type

    If PosFile<>0 AND (PosFile

      'Get Filename, content-type and content of file

      PosBeg = PosFile + 10

      PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(34)))

      FileName = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))

      'Add filename to dictionary object

      UploadControl.Add "FileName", FileName

      Pos = InstrB(PosEnd,RequestBin,getByteString("Content-Type:"))

      PosBeg = Pos+14

      PosEnd = InstrB(PosBeg,RequestBin,getByteString(chr(13)))

      'Add content-type to dictionary object

      ContentType = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))

      UploadControl.Add "ContentType",ContentType

      'Get content of object

      PosBeg = PosEnd+4

      PosEnd = InstrB(PosBeg,RequestBin,boundary)-2

      Value = MidB(RequestBin,PosBeg,PosEnd-PosBeg)

      Else

      'Get content of object

      Pos = InstrB(Pos,RequestBin,getByteString(chr(13)))

      PosBeg = Pos+4

      PosEnd = InstrB(PosBeg,RequestBin,boundary)-2

      Value = getString(MidB(RequestBin,PosBeg,PosEnd-PosBeg))

    End If

    'Add content to dictionary object

  UploadControl.Add "Value" , Value  

    'Add dictionary object to main dictionary

  UploadRequest.Add name, UploadControl  

    'Loop to next object

    BoundaryPos=InstrB(BoundaryPos+LenB(boundary),RequestBin,boundary)

  Loop

End Sub

'String to byte string conversion

Function getByteString(StringStr)

For i = 1 to Len(StringStr)

   char = Mid(StringStr,i,1)

  getByteString = getByteString & chrB(AscB(char))

Next

End Function

'Byte string to string conversion

Function getString(StringBin)

getString =""

For intCount = 1 to LenB(StringBin)

  getString = getString & chr(AscB(MidB(StringBin,intCount,1)))

Next

End Function

%>

test.mdb(dsn 名称:upload)

----------------------------------------

表pic:

id:自动加

filename:文本

type:文本

what:ole

-----------------------------------------

存成单个文件,放在一个目录下,打开(必须用http://...)getfile.htm

上传一个.gif或.jpg就可以显示了。

对于大文件在显示程序(showpic.asp)中可能会用到循环和getchunk方法。自己去做。记住,由于ASP目前暂时不支持二进行制读写,只能存二进制到数据库中。

有什么问题,请致电veryblue@chinese.com (IAmTrue)

-----------------------------------------------------------------

责任编辑:admin
相关文章