asp 写入数据库,数据库图片上传时写入说明问题,谢谢大家!!

数据库图片上传时写入说明问题,谢谢大家!! - 故障解答 - 电脑教程网

数据库图片上传时写入说明问题,谢谢大家!!

日期:2006-06-27   荐:
数据库图片上传时写入说明问题,谢谢大家!!我想把图片和说明同时存储在access数据库里,但实际实现不了,如下:上传文件:<form name="mainForm" enctype="multipart/form-data" action="process.asp" method=post> >>>>>>请选择图片文件:>><input type=file name=mefile> <p>请输入图片说明:<input type="text" name="explanation" size="20">>>>> </p><p> <input type=submit name=ok value="上传图片"> <input type=reset name=ok1 value="清除图片">>>>></p> </form>处理:<% explan=request("explanation") //*** 此句有问题,不知该怎么写**//response.buffer=true formsize=request.totalbytes formdata=request.binaryread(formsize) bncrlf=chrB(13) & chrB(10) divider=leftB(formdata,clng(instrb(formdata,bncrlf))-1) datastart=instrb(formdata,bncrlf & bncrlf) 4 dataend=instrb(datastart 1,formdata,divider)-datastart mydata=midb(formdata,datastart,dataend) set connGraph=server.CreateObject("ADODB.connection") connstr="DBQ=" server.mappath("images.mdb") ";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"connGraph.open connstrset rec=server.createobject("ADODB.recordset") rec.Open "SELECT * FROM [images] where id is null",connGraph,1,3 rec.addnew rec("说明")=explanrec("img").appendchunk mydata rec.update rec.close set rec=nothing set connGraph=nothing %> <font size="4" color="#FF0000"><b>图片上传成功,<a href="viewimages.asp">去浏览</a></b></font><%=explan%>实际运行时图片能上传到数据库,但说明explan无法写入数据库,我想可能是request.form和request.binaryread的冲突问题,但不知该如何解决???上传文件并加入上传信息的实例http://community.csdn.net/Expert/TopicView.asp?id=3531185楼上的兄弟 我这里图片也是上传到数据库中以OLE对象存储,而不是以文件上传,所以不一样的!! 这正是难点所在?gt;>?br>一样的,为什么不一样呢,呵呵,你难道没写enctype="multipart/form-data" ??呵呵真是的,ole也需要用binaryread和form是没有冲突的,不要乱说,只要加上了上面那句form就不能用了,跟binaryread是没关系的,如果你不信的话,可以到一个没有enctype="multipart/form-data" 实验一下,我的说法实际上这个没有什么问题的,你只要用一个无组就可以了你自己写的这个其实也挺好的(也许是copy的,因为代码挺成熟的),但是根本原理有谬误的其实很多道理看一下我的blog就能明白的,当然我对化镜也有很多不是很理解的地方关于数据流的一部分东西我不知道是什么,比如while <10那句话,我就觉得有问题的http://blog.csdn.net/liuxiaoyi666 关于无组的老话题上传组件文件面页:upload.inc<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>dim upfile_5xSoft_StreamClass upload_5xSoft dim Form,File,Version Private Sub Class_Initialize dim iStart,iFileNameStart,iFileNameEnd,iEnd,vbEnter,iFormStart,iFormEnd,theFiledim strDiv,mFormName,mFormValue,mFileName,mFileSize,mFilePath,iDivLen,mStrVersion=""if Request.TotalBytes<1 then Exit Subset Form=CreateObject("Scripting.Dictionary")set File=CreateObject("Scripting.Dictionary")set upfile_5xSoft_Stream=CreateObject("Adodb.Stream")upfile_5xSoft_Stream.mode=3upfile_5xSoft_Stream.type=1upfile_5xSoft_Stream.openupfile_5xSoft_Stream.write Request.BinaryRead(Request.TotalBytes)vbEnter=Chr(13)&Chr(10)iDivLen=inString(1,vbEnter) 1strDiv=subString(1,iDivLen)iFormStart=iDivLeniFormEnd=inString(iformStart,strDiv)-1while iFormStart < iFormEnd iStart=inString(iFormStart,"name=""") iEnd=inString(iStart 6,"""") mFormName=subString(iStart 6,iEnd-iStart-6) iFileNameStart=inString(iEnd 1,"filename=""") if iFileNameStart>0 and iFileNameStart<iFormEnd then iFileNameEnd=inString(iFileNameStart 10,"""") mFileName=subString(iFileNameStart 10,iFileNameEnd-iFileNameStart-10) iStart=inString(iFileNameEnd 1,vbEnter&vbEnter) iEnd=inString(iStart 4,vbEnter&strDiv) if iEnd>iStart thenmFileSize=iEnd-iStart-4 elsemFileSize=0 end if set theFile=new FileInfo theFile.FileName=getFileName(mFileName) theFile.FilePath=getFilePath(mFileName) theFile.FileSize=mFileSize theFile.FileStart=iStart 4 theFile.FormName=FormName file.add mFormName,theFile else iStart=inString(iEnd 1,vbEnter&vbEnter) iEnd=inString(iStart 4,vbEnter&strDiv) if iEnd>iStart thenmFormValue=subString(iStart 4,iEnd-iStart-4) elsemFormValue="" end if form.Add mFormName,mFormValue end if iFormStart=iformEnd iDivLen iFormEnd=inString(iformStart,strDiv)-1wendEnd SubPrivate Function subString(theStart,theLen) dim i,c,stemp upfile_5xSoft_Stream.Position=theStart-1 stemp="" for i=1 to theLen if upfile_5xSoft_Stream.EOS then Exit for c=ascB(upfile_5xSoft_Stream.Read(1)) If c > 127 Then if upfile_5xSoft_Stream.EOS then Exit for stemp=stemp&Chr(AscW(ChrB(AscB(upfile_5xSoft_Stream.Read(1)))&ChrB(c))) i=i 1 else stemp=stemp&Chr(c) End If Next subString=stempEnd functionPrivate Function inString(theStart,varStr) dim i,j,bt,theLen,str InString=0 Str=toByte(varStr) theLen=LenB(Str) for i=theStart to upfile_5xSoft_Stream.Size-theLen if i>upfile_5xSoft_Stream.size then exit Function upfile_5xSoft_Stream.Position=i-1 if AscB(upfile_5xSoft_Stream.Read(1))=AscB(midB(Str,1)) then InString=i for j=2 to theLen if upfile_5xSoft_Stream.EOS then inString=0 Exit for end if if AscB(upfile_5xSoft_Stream.Read(1))<>AscB(MidB(Str,j,1)) then InString=0 Exit For end if next if InString<>0 then Exit Function end if nextEnd FunctionPrivate Sub Class_Terminate form.RemoveAll file.RemoveAll set form=nothing set file=nothing upfile_5xSoft_Stream.close set upfile_5xSoft_Stream=nothingEnd Sub Private function GetFilePath(FullPath) If FullPath <> "" Then GetFilePath = left(FullPath,InStrRev(FullPath, "\")) Else GetFilePath = "" End If End function Private function GetFileName(FullPath) If FullPath <> "" Then GetFileName = mid(FullPath,InStrRev(FullPath, "\") 1) Else GetFileName = "" End If End function Private function toByte(Str) dim i,iCode,c,iLow,iHigh toByte="" For i=1 To Len(Str) c=mid(Str,i,1) iCode =Asc(c) If iCode<0 Then iCode = iCode 65535 If iCode>255 Then iLow = Left(Hex(Asc(c)),2) iHigh =Right(Hex(Asc(c)),2) toByte = toByte & chrB("&H"&iLow) & chrB("&H"&iHigh) Else toByte = toByte & chrB(AscB(c)) End If Next End functionEnd ClassClass FileInfo dim FormName,FileName,FilePath,FileSize,FileStart Private Sub Class_Initialize FileName = "" FilePath = "" FileSize = 0 FileStart= 0 FormName = "" End Sub Public function SaveAs(FullPath) dim dr,ErrorChar,i SaveAs=1 if trim(fullpath)="" or FileSize=0 or FileStart=0 or FileName="" then exit function if FileStart=0 or right(fullpath,1)="/" then exit function set dr=CreateObject("Adodb.Stream") dr.Mode=3 dr.Type=1 dr.Open upfile_5xSoft_Stream.position=FileStart-1 upfile_5xSoft_Stream.copyto dr,FileSize 'dr.SaveToFile FullPath,2 要注意这里了重点,引用了一下tsd的东东 set rec=... rec.open .... rec("img").appendchunk dr '这块儿也许要用到dr.read,这个需要你看一下stream对象的东西了,但大体结构就是这样的 rs.close dr.Close set dr=nothing SaveAs=0 end functionEnd Class</SCRIPT>request.form和request.binaryread这两个只能用一个你要用request.binaryread的话就需要把数据从传递的二进制信息里分离出来你可以把收到的数据存成.TXT文件在打开时就可以看到具体的信息,里面有各个FORM控件的信息和分隔标记你可以通过这些信息进行分离标记就是-----------------------------7d52d734101a6当然那串数字是随机的,但是在同一次提交中是相同的下面这个就是具体信息了Content-Disposition: form-data; name="xxx" 其中name就是控件的名字,如果是文件的话后面还会有filename="文件路径"下面才是传递的信息你了解了这个就可以对其数据进行分离了虽然网上有现成的,但我建议你最好自己编程实现楼上对的,binary和form不能同时用,我乱说了一下,化境的东西很成熟,如果自己写的话,效率高一些,但是很多东西都有问题,不过化镜有bug的,在于必须要有submit,且要有value的我的那个问题不在化境 我根本就没用啊 关键是如何解决binary和form不能同时用的棘手问题啊 我现在写入数据库图片字段需要binary,说明字段需要form,如何解决这个冲突呢?看我上面说的,binary和form不能同时用,而且不用form也可以传递说明字段,只不过需要从binary中把图片信息和说明字段分离出来就行了。实际上form不过是把字段分离给封装了,其实它也同样是执行的分离过程。只是form不能传文件,所以只有自己编程手动分离该怎么分离呢?祥述一下 或网上哪有相关链接? 我的qq63423201instr 找filename 和 name就能分辨,跟你说了也没用,什么都不学,企鹅
标签: