设为首页 | 加入收藏 | 
ASP简单易用上传类及示例[无组件]
作者:叶随风 时间: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>

 * 以上任何内容或信息侵犯了你的利益,请及时联系!
泡泡搜索
最新文章
热点文章
精彩推荐
 - TOP