作者:叶随风 时间:03月15日 来源:http://www.popasp.com 浏览次数:【字号: 大 中 小】
使用之前,将上传类代码保存文件,在需要接收的页面载入即可。
上传类代码:
泡泡ASP相关代码: <% ’简单易用上传类LJFUpLoadClass.asp Class GetPost Private BdataStr,SeparationStr,LJF_Stream ’类初始化 Private Sub Class_Initialize Set LJF_Stream = CreateObject("Adodb.Stream") ’创建全局流 LJF_Stream.Mode = 3 ’读写模式 LJF_Stream.Type = 1 ’二进制读取模式 LJF_Stream.Open ’打开流 BdataStr = Request.BinaryRead(Request.TotalBytes) ’获取上传的所有数据 LJF_Stream.Write BdataStr ’读取数据 SeparationStr = LeftB(BdataStr,Clng(inStrb(BdataStr,ChrB(13) + ChrB(10))) - 1) ’分隔字符串 End Sub ’类的析构函数,卸载全局流对象 Private Sub Class_Terminate LJF_Stream.Close Set LJF_Stream = Nothing End Sub ’返回file型表单域的值(二进制) Public Function GetFile(FieldName) Dim L1,DataStart,DataLng L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) + FieldName + Chr(34))) DataStart = InStrB(L1,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) + 4 DataLng = InStrB(DataStart,BdataStr,SeparationStr) - DataStart - 2 GetFile = MidB(BdataStr,DataStart,DataLng) End Function ’返回文件的类型 Public Function GetFileType(FieldName) Dim L1,DataStart,DataLng L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) + FieldName + Chr(34))) DataStart = InStrB(L1,BdataStr,GetBinary("Content-Type:")) + 13 DataLng = InStrB(DataStart,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) - DataStart GetFileType = GetText(MidB(BdataStr,DataStart,DataLng)) End Function ’返回文件的原始路径 Public Function GetFilePath(FieldName) Dim L1,DataStart,DataLng L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) + FieldName + Chr(34))) DataStart = InStrB(L1,BdataStr,GetBinary("filename=")) + 9 DataLng = InStrB(DataStart,BdataStr,ChrB(13) + ChrB(10)) - DataStart GetFilePath = GetText(MidB(BdataStr,DataStart+1,DataLng-2)) ’去掉最左边和最右边的双引号 End Function ’返回原始文件的后缀名 Function GetExtendName(FieldName) FileName = GetFilePath(FieldName) If isNull(FileName) or FileName = "" Then GetExtendName = "" Exit Function End If GetExtendName = Mid(FileName,InStrRev(FileName, ".")) End Function ’返回file型表单域的值(二进制) Public Function GetFileSize(FieldName) Dim L1,DataStart,DataLng L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) + FieldName + Chr(34))) DataStart = InStrB(L1,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) + 4 DataLng = InStrB(DataStart,BdataStr,SeparationStr) - DataStart - 2 GetFileSize = DataLng End Function ’从二进制字符串里取出表单域的值(字符串) Public Function RetFieldText(FieldName) Dim L1,DataStart,DataLng DataStart = 0 L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) + FieldName + Chr(34))) DataStart = InStrB(L1,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) + 4 DataLng = InStrB(DataStart,BdataStr,SeparationStr) - DataStart - 2 RetFieldText = GetText(MidB(BdataStr,DataStart,DataLng)) End Function ’返回一个时间和随机数连接后的字符串,用于构建文件名 Function getRndFileName() Dim RanNum Randomize RanNum = Int(90000 * Rnd) + 10000 getRndFileName = Year(Now) & Month(Now) & Day(Now) & Hour(Now) & Minute(Now) & Second(Now) & RanNum End Function ’将二进制外码系列转换成vb字符串 Private Function GetText(GTStr) Dim s,t,t1,i s = "":t = "":t1 = "" For i = 1 To LenB(GTStr) t = AscB(MidB(GTStr,i,1)) ’按字节取出外码 If Not(t > 127) Then ’字节高位为0,表示英文字符 s = s + Chr(t) Else i = i + 1 ’当为汉字时,取第二个字节 t1 = AscB(MidB(GTStr,i,1)) s = s + Chr(t * 256 + t1) ’将汉字两字节外码组合成ANSI码 End If Next GetText = s End Function ’将字符串转换为二进制系列 Private Function GetBinary(GBStr) Dim T2,t1,i For i = 1 To Len(GBStr) t1 = CStr(Hex(Asc(Mid(GBStr,i,1)))) If Len(t1) = 2 Then T2 = T2 + ChrB(Clng("&h" + Trim(t1))) Else T2 = T2 + ChrB(Clng("&H") + Mid(Trim(t1),1,2)) T2 = T2 + ChrB(Clng("&H") + Mid(Trim(t1),3,2)) End If Next GetBinary = T2 End Function ’将上传的文件保存在服务器的硬盘上 Public Function SaveToFile(FieldName,FullPath) Dim dr SaveToFile = "" If Trim(FullPath) = "" or FileName = "" Then Exit Function ’检测参数是否有真实数据 If Right(FullPath,1) = "/" Then Exit Function ’检测路径的正确性 Set dr = CreateObject("Adodb.Stream") dr.Mode = 3 ’读写模式 dr.Type = 1 ’二进制模式 dr.Open Dim L1,DataStart,DataLng L1 = InStrB(BdataStr,GetBinary("name=" + Chr(34) + FieldName + Chr(34))) ’获取file域的位置 DataStart = InStrB(L1,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) + 4 ’实体数据的开始位置 DataLng = InStrB(DataStart,BdataStr,ChrB(13) + ChrB(10) + ChrB(13) + ChrB(10)) - DataStart ’实体数据的大小 LJF_Stream.Position = DataStart - 1 ’设置全局流的游标,因为全局流和全局数据BdataStr对应的 LJF_Stream.CopyTo dr,DataLng ’从全局流里获取数据 dr.SaveToFile FullPath,2 ’保存在指定位置 dr.Close Set dr = Nothing SaveToFile = Mid(FileName,InStrRev(FileName, "\")+1) ’返回上传文件的文件名 End Function End Class %> |
具体示例代码:
一、表单页(选择上传文件)TestForm.asp
泡泡ASP相关代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>测试上传类</title> </head> <body> <form method="post" enctype="multipart/form-data" name="form1" id="form1" action="TestReceive.asp"> <input type="file" name="file1" id="file1" /> <input type="text" name="Txt1" id="Txt1" /> <input type="submit" name="Submit" value="提交" /> </form> </body> </html> |
二、接收处理页 TestReceive.asp
因为只是个测试,所以没有写数据库,只是传到指定目录后,把地址和相关信息输出而已。可以根据需要修改为连接数据库的,很方便。
注意:上传只之前先设置保存文件的路径,设置变量UpDir的值,设置相对路径。
泡泡ASP相关代码: <!--#include file="LJFUpLoadClass.asp"--> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>接收上传数据并输出</title> </head> <body> <% Dim oUpLoad, UpDir Set oUpLoad = new GetPost UpDir = "UpLoad" ’上传文件保存的目录,相对路径 Response.Write("file1的原始路径是:" & oUpLoad.GetFilePath("file1") & "<br>") Response.Write("file1的文件类型是:" & oUpLoad.GetFileType("file1") & "<br>") Response.Write("file1的原始文件扩展文件名:" & oUpLoad.GetExtendName("file1") & "<br>") Response.Write("file1的原始文件大小:" & oUpLoad.GetFileSize("file1") & "字节<br>") Dim filename filename = Server.MapPath(UpDir)& "\" & oUpLoad.getRndFileName()& oUpLoad.GetExtendName("file1") Response.Write("<br>file1上传后的位置:" & filename & "<br>") Dim file1name file1name = oUpLoad.SaveToFile("file1",filename) Response.Write (filename & "上传成功<br>") Response.Write("<br>文本框内容:" & oUpLoad.RetFieldText("Txt1")) %> </body> </html> |
* 以上任何内容或信息侵犯了你的利益,请及时联系!

| |
|