问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

ASP无组件上传源码解释

发布网友 发布时间:2022-04-22 08:41

我来回答

2个回答

热心网友 时间:2022-04-22 10:11

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!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>
<%If request.totalbytes>0 Then
formsize=request.totalbytes ' 取二进制流字节长度
formdata=request.binaryread(formsize) ' 读取二进制流内容
bncrlf=chrB(13)&chrB(10)
datastart=instrb(formdata,bncrlf&bncrlf)+3 ' 取二进制流文件开始位置 (两个回车换行符)
divider=leftB(formdata,instrb(formdata,bncrlf)-1) ' 定义取二进制流 Field 分隔标记 (内容为二进制)
dataend=instrb(datastart,formdata,divider)-datastart ' 取二进制流文件部分结束位置
'将文件信息保存到数据库
'Call ImgToDb() '将上传的图片以二进制保存到数据库中
Call SaveTofile() '将上传的文件保存到服务器
End If
Sub ImgToDb() '将上传的图片以二进制保存到数据库中
mydata=midb(formdata,datastart+1,dataend)'
Set conn=server.CreateObject("adodb.connection")
conn.provider="microsoft.jet.oledb.4.0"
conn.open server.mappath("book/stu.mdb")
Set rs=server.CreateObject("adodb.recordset")
rs.open "select * from img",conn,3
rs.movelast
rs.addnew
rs("img").appendchunk mydata
rs.update
response.binarywrite rs(1)
response.End
End Sub
Sub SaveTofile()'将上传的文件保存到服务器
'2.将获取的信息以二进制流文件存放 --- stm
savepath=server.mappath("images")&"\" '根据情况自己要先建立相应目录 或者开启fso自动建立
Set strm=createObject("adodb.str"&"eam")
with strm
.type=1 ' 二进制模式
.mode=3 ' 指定打开模式为读写
.open
.write formdata '写入二进制流内容
'以文本模式读取数据,用于获得提交上来的文件路径及名称等信息
.position=0 '将游标指向数据首部
.type=2 '以文本模式读取
.CharSet = "gb2312" '设置中文编码
formhead=.ReadText(datastart-1) '读取表单头部内容
End with
'2.1获取上传的文件名称filename
fullname=fRegExpSgl(formhead,true,true,true,"[\s\S]*filename\=""(.*?)""[\s\S]*","$1")
fname=Split(fullname,"\")
filename=fname(UBound(fname)) '获取到文件名
Set fso = Server.CreateObject("Scripting.File"&"System"&"Object") '判断是否与本地盘文件重名,否则重命名 XXX(1).xxx
If fso.FileExists(savepath&filename) Then
For i=1 To 999
Fxname=Split(filename,".")
Fn=Left(filename,InstrRev(filename,".")-1)
Fnx=fxname(UBound(fxname))
If Not fso.FileExists(SavePath&Fn&"("&i&")."&Fnx) Then
filename=Fn&"("&i&")."&Fnx
Exit For
End If
Next
End If
'3.从stm二进制流文件中获取有效信息 及 保存文件
Set formstrm=createOBject("adodb.str"&"eam")
with formstrm
.type=1 ' 二进制模式
.mode=3
.open
strm.position = datastart ' 指定 stm 对象的起始位置, 以变量 bStart 的值为起始位置
strm.copyTo formstrm,dataend ' 拷贝 stm 二进制流至 fromStm 对象, 长度为 bEnd 变量的长度
.saveTofile (savepath&filename),2 ' 将信息保存到文件, 如果存在相同名称, 则覆盖
.close
end with
Set strm=Nothing
Set formstrm=Nothing
response.redirect "?upload=ok&name="&filename
End Sub function fRegExpSgl(str,glb,igc,mtl,pt,rpt)
dim re
set re=new RegExp
re.global=glb
re.ignoreCase=igc
re.multiline=mtl
re.pattern=pt
fRegExpSgl=re.replace(str,rpt)
set re=nothing
end function
%>
<html>
<body leftmargin="0" topmargin="0">
<form action="" method="post" name="form1" enctype="multipart/form-data">
<!-- enctype="multipart/form-data"不能省略,以保证提交过来的信息的正确性,可以远程提交信息 -->
<input name="FileName" type="FILE" class="tx1" size="40" style="height:22">
<input type="submit" name="Submit" value=" 上传 " style="color:red;height:22;width:70">
</form>
<%
'''测试语句:输出相关图片
If request("upload")="ok" Then
response.write "<img src=""images/"&request("name")&""">"
End If
%>
</body>
</html>
</body>
</html>

热心网友 时间:2022-04-22 11:29

saveannounce_upload.asp 上传页
------------------------------------
<html>
<head>
<style type="text/css">
body {font-size:9pt;}
input {font-size:9pt;}
</style>
<title>文件上传</title>
</head>
<body>
<form name="form" method="post" action="saveannouce_upfile.asp" enctype="multipart/form-data" >
文件
<input type="file" name="file1" size=10>
<input type="submit" name="Submit" value="上传">
</form>
</body>
</html>

------------------------------------
saveannouce_upfile.asp 保存文件到服务器
------------------------------------
<!--#include FILE="upload.inc"-->
<html>
<head>
<title>文件上传</title>
</head>
<body>
<%
dim upload,file,formName,formPath
set upload=new upload_5xSoft ''建立上传对象
formPath=upload.form("filepath") ''在目录后加(/)
if right(formPath,1)<>"/" then formPath=formPath&"/"
for each formName in upload.file ''列出所有上传了的文件
set file=upload.file(formName) ''生成一个文件对象
if file.filesize<100 then
response.write "<font size=2>请先选择你要上传的文件 [ <a href=# onclick=history.go(-1)>重新上传</a> ]</font>"
response.end
end if
if file.filesize>500*1000 then '设置上传文件大小为500K
response.write "<font size=2>文件大小超过了* 500K [ <a href=# onclick=history.go(-1)>重新上传</a> ]</font>"
response.end
end if
if file.FileSize>0 then ''如果 FileSize > 0 说明有文件数据
file.SaveAs Server.mappath("updata\"&file.FileName) ''保存文件
end if
set file=nothing
next
set upload=nothing
response.write "<font size=2>文件上传成功 [ <a href=# onclick=history.go(-1)>继续上传</a> ]</font>"
%>
</body>
</html>
------------------------------------
upload.inc 建立upload对象
------------------------------------
<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>

dim upfile_5xSoft_Stream

Class upload_5xSoft

dim Form,File,Version

Private Sub Class_Initialize
dim iStart,iFileNameStart,iFileNameEnd,iEnd,vbEnter,iFormStart,iFormEnd,theFile
dim strDiv,mFormName,mFormValue,mFileName,mFileSize,mFilePath,iDivLen,mStr
Version=""
if Request.TotalBytes<1 then Exit Sub
set Form=CreateObject("Scripting.Dictionary")
set File=CreateObject("Scripting.Dictionary")
set upfile_5xSoft_Stream=CreateObject("Adodb.Stream")
upfile_5xSoft_Stream.mode=3
upfile_5xSoft_Stream.type=1
upfile_5xSoft_Stream.open
upfile_5xSoft_Stream.write Request.BinaryRead(Request.TotalBytes)

vbEnter=Chr(13)&Chr(10)
iDivLen=inString(1,vbEnter)+1
strDiv=subString(1,iDivLen)
iFormStart=iDivLen
iFormEnd=inString(iformStart,strDiv)-1
while 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 then
mFileSize=iEnd-iStart-4
else
mFileSize=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 then
mFormValue=subString(iStart+4,iEnd-iStart-4)
else
mFormValue=""
end if
form.Add mFormName,mFormValue
end if

iFormStart=iformEnd+iDivLen
iFormEnd=inString(iformStart,strDiv)-1
wend
End Sub

Private 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=stemp
End function

Private 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
next
End Function

Private Sub Class_Terminate
form.RemoveAll
file.RemoveAll
set form=nothing
set file=nothing
upfile_5xSoft_Stream.close
set upfile_5xSoft_Stream=nothing
End 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 function
End Class

Class 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
dr.Close
set dr=nothing
SaveAs=0
end function
End Class
</SCRIPT>
希望对楼主有帮助。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
泌尿系结核肾结核有哪些特点 肾结核治好影响寿命吗 邢台七路公交车2020年一月二十九号通车吗? 笔记本的USB有线网卡上不了网,试了公司的台式机(是路由器的),店家的... 喝多给特别喜欢的男生打电话骂他,他也不生气,是不在意吗 为什么我的QQ绑定不起手机为什么说我本次操作存在风? 内账应收应付怎么对账 应收应付应该如何对账 深圳弗林棕旅行社有限公司怎么样? 深圳市鹏运国际旅行社有限公司怎么样? 如何接线可使DDS237电子式电表走得慢些? 电表走太快了,有人能教教怎么调慢吗?。上海华立DDS237-1型单相电子式电能表 索尼投影机VPL-EW5屏幕锁死后,电源按键红灯显示长亮,打不开机请问是什么原因? 索尼笔记本触摸鼠标锁怎么打开 我笔记本电脑密码锁了,华硕的.请问怎样解锁,知道请告诉我!谢了! 索尼笔记本怎么锁定、解锁定键盘和触摸屏? 索尼笔记本电脑怎么解除锁屏幕 隋清怎么读 隋洐怎么读? 隋末的隋怎么读 隋朝怎么读? 除隋乱 隋怎么读 李商隐写的隋官的隋怎么读? 十六国中的隋怎么读 隋子怎么读 手机2345浏览器要流量吗 2345手机浏览器的应用简介 《推荐》《2345手机浏览器》有危险吗 全国最好的二本文科大学有哪些啊 中国的文科二本大学有哪些? 我的手机微信圈图片发不出去,文字可以发出去。怎么回事 微信为什么发图片失败可以发语音可以发文字,就是微信图片发不出去。 请帮看看600478科力远有投资价值吗 法律上年龄的定义? 法律上如何界定年龄 法律规定年龄 在法律上对年龄定义 请问法律上年龄的定义是怎样的? 我们知道法律上定义已满18周岁是指18周岁生日的次日0时开始计算的 请问法律上年龄的定义? 我们知道法律上定义已满18周岁是指18周岁生日的次日0时开始计算的,那么问 回首往事知多少打一肖 苹果手表iwatch中文怎么读 老鼠过街最无奈,从来未见人帮忙,回首往事知多少,但心自问扤胸口。 (这句话暗示了什么生肖) 回首往事知多少打一生肖 Care怎么读 怀孕7个月的人可以喝金丝燕窝吗 1年后提前还款等额本息亏吗 pacdot电容笔如何开机 什么叫门静脉高压, 门静脉高压症是指门静脉压力达到多少 门静脉高压症的临床表现