AI智能
改变未来

真正实现无组件图文混合上传 asp实例

本程序无须任何数据库支持,直接将上传的文件保存到服务器指定的路径下。
测试环境:Windows2000 + IIS 5.0(对ADO版本有要求)
已知BUG:利用相同文件表单名以唯一文件名方式同时上传多个文件,且服务器上存在多个相同文件名时,只有第一个文件会自动改名上传成功,然后程序报错, 保存时将文件名后加一随机数可避免。
源代码如下,:

upload.htm

New Page 1

姓名:

城市:

爱好:1、 2、

性别:男

省份:
江苏
山西

爱好(补充):3、 4、

作品1:

作品1:

作品2:

upload.asp

<!– #include file=\”uploadx.asp\” –&gt
Response.Write \”
Name=\”\”\” & GetFormVal(\”name\”) & \”\”\”\”
Response.Write \”
Sex=\”\”\” & GetFormVal(\”sex\”) & \”\”\”\”
Response.Write \”
province=\”\”\” & GetFormVal(\”province\”) & \”\”\”\”
Response.Write \”
city=\”\”\” & GetFormVal(\”city\”) & \”\”\”\”
Response.Write \”
lover=\”\”\” & GetFormVal(\”lover\”) & \”\”\”\”
dim filename
path = Server.MapPath(\”./\”)
filename = SaveFile(\”fruit\”,path,1024,0)
If filename <> \”*TooBig*\” Then
Response.Write \”

\”\”\” & filename & \”\”\”已经上传\”
Else
Response.Write \”

文件超出限制太大\”
End IF

filename = SaveFile(\”fruit2\”,path,1024,0)
If filename <> \”*TooBig*\” Then
Response.Write \”

\”\”\” & filename & \”\”\”已经上传\”
Else
Response.Write \”

文件超出限制太大\”
End IF
%>

[@more@]

UploadX.asp

Dim FormData, FormSize, Divider, bCrLf
FormSize = Request.TotalBytes
FormData = Request.BinaryRead(FormSize)
bCrLf = ChrB(13) & ChrB(10)
Divider = LeftB(FormData, InStrB(FormData, bCrLf) – 1)

\’将上传的文件保存到path所指定的目录下面。
\’Formfield 上传表单的\”file\”域名
\’Path 要保存文件的服务器绝对路径,形式为:\”d:pathsubpath\”或\”d:pathsubpath\”
\’MaxSize 限制上传文件的最大长度,以KByte为单位
\’SavType 服务器保存文件的方式:
\’ 0 唯一文件名方式,如果有同名则自动改名;
\’ 1 报错方式,如果有同名则出错;
\’ 2 覆盖方式,如果有同名则覆盖原来的文件
Function SaveFile(FormFileField, Path, MaxSize, SavType)
Dim StreamObj,StreamObj1
Set StreamObj = Server.CreateObject(\”ADODB.Stream\”)
Set StreamObj1 = Server.CreateObject(\”ADODB.Stream\”)
StreamObj.Mode = 3
StreamObj1.Mode = 3
StreamObj.Type = 1
StreamObj1.Type = 1
SaveFile = \”\”
StartPos = LenB(Divider) + 2
FormFileField = Chr(34) & FormFileField & Chr(34)
If Right(Path,1) <> \”\” Then
Path = Path & \”\”
End If
Do While StartPos > 0
strlen = InStrB(StartPos, FormData, bCrLf) – StartPos
SearchStr = MidB(FormData, StartPos, strlen)
If InStr(bin2str(SearchStr), FormFileField) > 0 Then
FileName = bin2str(GetFileName(SearchStr,path,SavType))
If FileName <> \”\” Then
FileStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
FileLen = InStrB(StartPos, FormData, Divider) – 2 – FileStart
If FileLen <= MaxSize*1024 Then
FileContent = MidB(FormData, FileStart, FileLen)
StreamObj.Open
StreamObj1.Open
StreamObj.Write FormData
StreamObj.Position=FileStart-1
StreamObj.CopyTo StreamObj1,FileLen
If SavType =0 Then
SavType = 1
End If
StreamObj1.SaveToFile Path & FileName, SavType
StreamObj.Close
StreamObj1.Close
If SaveFile <> \”\” Then
SaveFile = SaveFile & \”,\” & FileName
Else
SaveFile = FileName
End If
Else
If SaveFile <> \”\” Then
SaveFile = SaveFile & \”,*TooBig*\”
Else
SaveFile = \”*TooBig*\”
End If
End If
End If
End If
If InStrB(StartPos, FormData, Divider) < 1 Then
Exit Do
End If
StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
Loop
End Function

Function GetFormVal(FormName)
GetFormVal = \”\”
StartPos = LenB(Divider) + 2
FormName = Chr(34) & FormName & Chr(34)
Do While StartPos > 0
strlen = InStrB(StartPos, FormData, bCrLf) – StartPos
SearchStr = MidB(FormData, StartPos, strlen)
If InStr(bin2str(SearchStr), FormName) > 0 Then
ValStart = InStrB(StartPos, FormData, bCrLf & bCrLf) + 4
ValLen = InStrB(StartPos, FormData, Divider) – 2 – ValStart
ValContent = MidB(FormData, ValStart, ValLen)
If GetFormVal <> \”\” Then
GetFormVal = GetFormVal & \”,\” & bin2str(ValContent)
Else
GetFormVal = bin2str(ValContent)
End If
End If
If InStrB(StartPos, FormData, Divider) < 1 Then
Exit Do
End If
StartPos = InStrB(StartPos, FormData, Divider) + LenB(Divider) + 2
Loop
End Function

Function bin2str(binstr)
Dim varlen, clow, ccc, skipflag
skipflag = 0
ccc = \”\”
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
bin2str = ccc
End Function

Function str2bin(str)
For i = 1 To Len(str)
str2bin = str2bin & ChrB(Asc(Mid(str, i, 1)))
Next
End Function

Function GetFileName(str,path,savtype)
Set fs = Server.CreateObject(\”Scripting.FileSystemObject\”)
str = RightB(str,LenB(str)-InstrB(str,str2bin(\”filename=\”))-9)
GetFileName = \”\”
FileName = \”\”
For i = LenB(str) To 1 Step -1
If MidB(str, i, 1) = ChrB(Asc(\”\”)) Then
FileName = MidB(str, i + 1, LenB(str) – i – 1)
Exit For
End If
Next
If savtype = 0 and fs.FileExists(path & bin2str(FileName)) = True Then
hFileName = FileName
rFileName = \”\”
For i = LenB(FileName) To 1 Step -1
If MidB(FileName, i, 1) = ChrB(Asc(\”.\”)) Then
hFileName = LeftB(FileName, i-1)
rFileName = RightB(FileName, LenB(FileName)-i+1)
Exit For
End If
Next
For i = 0 to 9999
\’hFileName = hFileName & str2bin(i)
If fs.FileExists(path & bin2str(hFileName) & i & bin2str(rFileName)) = False Then
FileName = hFileName & str2bin(i) & rFileName
Exit For
End If
Next
End If
Set fs = Nothing
GetFileName = FileName
End Function
%>

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7944812/viewspace-1007866/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7944812/viewspace-1007866/

  • 点赞
  • 收藏
  • 分享
  • 文章举报

config20140103发布了0 篇原创文章 · 获赞 0 · 访问量 35私信关注

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 真正实现无组件图文混合上传 asp实例