好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

无组件文件上传代码实例

关于无组件文件上传的文章已经很多了,所以在这里我不想再解释无组件文件上传的原理。在asp中无法将二进制文件数据直接保存成文件,所以我们一般还是利用数据库来保存用户上传的文件。 1。数据库表结构(access): UserID:Text(保存上传文件的用户ID) FileCon

关于无组件文件上传的文章已经很多了,所以在这里我不想再解释无组件文件上传的原理。在asp中无法将二进制文件数据直接保存成文件,所以我们一般还是利用数据库来保存用户上传的文件。 1。数据库表结构(access): UserID:Text(保存上传文件的用户ID) FileContentType:Text(用来保存上传文件的类型,eg:"application/msWord",主要用来使用户能正确下载此文件) FileContent:OLE Object(保存文件数据) 2。HTML文件 muploadfile.htm 3。ASP文件 muploadfile.asp Response.Expires=0 Function bin2str(binstr)   Dim varlen,clow,ccc,skipflag   skipflag=0   ccc = ""   If Not IsNull(binstr) Then     varlen=LenB(binstr)     For i=1 To varlen       If skipflag=0 Then         clow = MidB(binstr,i,1)         If AscB(clow) > 127 Then           ccc =ccc & Chr(AscW(MidB(binstr,i+1,1) & clow))           skipflag=1         Else           ccc = ccc & Chr(AscB(clow))         End If       Else         skipflag=0       End If     Next   End If   bin2str = ccc End Function varByteCount = Request.TotalBytes bnCRLF = chrB( 13 ) & chrB( 10 ) binHTTPHeader=Request.BinaryRead(varByteCount)     Divider = LEFTB( binHTTPHeader, INSTRB( binHTTPHeader, bnCRLF ) - 1 ) '开始读非文件域的数据 Do while lenB(binHTTPHeader)>46      binHeaderData = LeftB(binHTTPHeader, INSTRB( binHTTPHeader, bnCRLF & bnCRLF )-1)   strHeaderData=bin2str(binHeaderData)   lngFieldNameStart=Instr(strHeaderData,"name="&chr(34))+Len("name="&chr(34))   lngFieldNameEnd=Instr(lngFieldNameStart,strHeaderData,chr(34))         strFieldName=Mid(strHeaderData,lngFieldNameStart,lngFieldNameEnd-lngFieldNameStart)   strFieldName=Trim(strFieldName)   strFieldName=Replace(strFieldName,vbcrlf,vbnullstring)        '判断文件数据时候开始   If strComp(strFieldName,"FileUploadStart",1)=0 Then     binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider ))     exit do   End if      DataStart = INSTRB( binHTTPHeader, bnCRLF & bnCRLF ) + 4   DataEnd = INSTRB( DataStart + 1, binHTTPHeader, divider ) - DataStart   binFieldValue=MIDB( binHTTPHeader, DataStart, DataEnd )   strFieldValue=bin2str(binFieldValue)   strFieldValue=Trim(strFieldValue)   strFieldValue=Replace(strFieldValue,vbcrlf,vbnullstring)   '非文件上传域变量赋值   execute strFieldName&"="""&strFieldValue&""""           binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider ))      loop '开始处理文件数据 Do while lenB(binHTTPHeader)>46         binHeaderData = LeftB(binHTTPHeader, INSTRB( binHTTPHeader, bnCRLF & bnCRLF )-1)        strHeaderData=bin2str(binHeaderData)      '读取上传文件的Content-Type   lngFileContentTypeStart=Instr(strHeaderData,"Content-Type:")+Len("Content-Type:")   strFileContentType=Trim(Mid(strHeaderData,lngFileContentTypeStart))   strFileContentType=Replace(strFileContentType,vbCRLF,vbNullString)      '读取上传的文件名   lngFileNameStart=Instr(strHeaderData,"filename="&chr(34))+Len("filename="&chr(34))   lngFileNameEnd=Instr(lngFileNameStart,strHeaderData,chr(34))   strFileName=Mid(strHeaderData,lngFileNameStart,lngFileNameEnd-lngFileNameStart)   strFileName=Trim(strFileName)   strFileName=Replace(strFileName,vbCRLF,vbNullString)      '读取上传文件数据   DataStart = INSTRB( binHTTPHeader, bnCRLF & bnCRLF ) + 4   DataEnd = INSTRB( DataStart + 1, binHTTPHeader, divider ) - DataStart      If strFileName "" Then              binFieldValue=MIDB( binHTTPHeader, DataStart, DataEnd )          '将上传的文件写入数据库     set conn = Server.CreateObject("ADODB.Connection")     conn.Open "DSN=abc"          SQL="select * from User_File"     set rs=server.CreateObject("ADODB.Recordset")     rs.Open sql,conn,3,3     rs.addnew     rs("UserID")=UserID     rs("FileContentType")=strFileContentType     rs("FileContent").AppendChunk binFieldValue     rs.update     rs.close     set rs=Nothing     conn.Close     set conn=Nothing        End if      binHTTPHeader=MIDB(binHTTPHeader,INSTRB( DataStart + 1, binHTTPHeader, divider ))    loop %> 4。下载用户上传的文件 Response.Buffer   = true Response.Clear UserID=request("UserID") Set conn=server.createobject("adodb.connection") set rs=server.createobject("adodb.recordset") conn.open "DSN=UploadFile" rs.open "select * from User_File where UserID='"&UserID&"'",conn,3,3 Response.ContentType = rs("FileContentType") lngOffset=0 conChunkSize=1024 lngPictSize=rs("FileContent").ActualSize Do While lngOffset  varChunk = rs("FileContent").GetChunk(conChunkSize)  Response.BinaryWrite varChunk  lngOffset = lngOffset + conChunkSize  If lngOffset > lngPictSize Then Exit Do Loop rs.close set rs=Nothing conn.close set conn=nothing %> 就是这些了,希望此方法对大家能有所帮助。:)

查看更多关于无组件文件上传代码实例的详细内容...

  阅读:34次