花几个小时写的一个简单的单文件上传示例,里面附带详细的函数说明(主体函数每句都有) 在这里不是说我的水平有多高,只是和大家分享下,希望对一些朋友有些帮助 注意:此例只是上传单个文件,可以根据本示例的说明去研究以下别人写的无组件上传类(我的blog有我自己写的),应该会有很大帮助,这样会更灵活的去处理自己上传文件的时候遇见的各种问题,例如,文件以什么样的文件名保存,保存到哪里等.... 代码可以到我的Blog下载 我的BLOG,文件列表-简单的单文件上传示例
<html>
<head>
<title>简单的单文件上传</title>
<style>
BODY {
font-size: 12px;
}
INPUT {
font-size: 12px;
border: 1px #dddddd solid;
}
.f {
font-size: 12px;
border: 1px #dddddd solid;
width: 300px
}
IMG {
border: 0px;
}
</style>
</head>
<body>
<h3>简单的文件上传示例及详细说明(用户讲解上传原理,勿用于生产环境)</h3>
<hr />
<form name="form1" action="simpleupload.asp?act=upload" method="post" enctype="multipart/form-data">
选择本地文件:
<input class="f" type="file" name="file1" />
<input type="submit" value="提交" />
</form>
<%
if request.querystring( "act")="upload" then
dim t_stream,FormName,localname,servername,tdata '定义变量
tdata=request.binaryread(request.totalbytes)
call getdata(tdata)
'调用主体函数处理数据
response.write "<b>成功上传文件到服务器!</b><br />"
response.write "表单名:<font color=green>"&FormName& "</font><br />"
response.write "本地文件名:<font color=green>"&localname& "</font><br />"
response.write "服务器文件名:<font color=green>"&server.mappath(servername)&"</font><br />"
response.write "<a href=" ""&servername& "" ">打开文件</a>"
end if
%>
</body>
</html>
<%
'函数名:getdata
'参数:tempdata-待处理的二进制数据,由客户端提交得到 '作用:处理客户端提交来的数据
Function getdata(tempdata)
'初始化stream对象 t_stream.type=1 '设置数据模式为二进制
set t_stream=server.createobject("adodb.stream")
'设置读写模式为读和写 t_stream.open '打开stream对象
t_stream.mode=3
'写入用户提交的数据,写入文件用
t_stream.write tempdata
'换行符
bcrlf=chrb(13)&chrb(10)
'找到第一个换行符位置
sSplit=midb(tempdata,1,fpos-1)
'得到数据分割标志
fpos=instrb(1,tempdata,bcrlf)
'得到数据分割标志的长度
slen=lenb(ssplit)
'表单开始位置
istart=slen+2
'获得表单的结束位置
formend=instrb(istart,tempdata,bcrlf&bcrlf)
'获得表单相关的文本内容
formhead=midb(tempdata,istart,formend-istart)
'将二进制内容转换为文本
str=bytes2str(formhead)
'查找表单名的开始位置,为什么要+6?name="正好6个字符长
startpos=instr(str, "name=""")+6
'查找表单名的结束位置
endpos=instr(startpos,str,"""")
'获得表单名
FormName=mid(str,startpos,endpos-startpos)
'获得本地文件路径的开始位置,+10和上面原理一样
startpos=instr(str,"filename=""")+10
'获得本地文件路径的结束位置
endpos=instr(startpos,str, """")
'获得本地文件路径
filename=mid(str,startpos,endpos-startpos)
'保存本地文件路径到变量
localname=filename
'获得本地文件名
filename=mid(filename,instrrev(filename,"/")+1)
'获地文件后缀
fileExe=split(filename, ".")(1)
'获得文件数据的结束位置
valueend=instrb(formend+3,tempdata,sSplit)
'调用函数生成随即字串
newname=getRndName()
'连接后缀生成新文件名,以后保存到服务器用
newname=newname&"."&fileExe
'保存新文件名到变量
servername=newname
'调用函数保存文件
call savf(newname,formend+3,valueend-formend-6)
'关闭stream对象
t_stream.close
'销毁stream对象
set t_stream=nothing
End Function
'函数名:savf
'参数:fname-以本参数为文件名保存到服务器,pos-要保存文件内容在流内的位置,siz-要保存的流大小(也就是文件大小)
'作用:保存文件
Function savf(fname,pos,siz)
dim mystream
set mystream=server.createobject("adodb.stream")
mystream.type=1
mystream.mode=3
mystream.open
t_stream.position=Pos
t_stream.CopyTo mystream,siz
mystream.savetofile server.mappath(fname)
mystream.close
set mystream=nothing
End Function
'函数名:bytes2str
'参数:byt-待转换的二进制数据
'作用:将二进制数据转换为文本
Function bytes2str(byt)
if lenb(byt)=0 then
bytes2str=""
exit function
end if
dim mystream
set mystream=server.createobject( "adodb.stream")
mystream.type=2
mystream.mode=3
mystream.open
mystream.writetext byt
mystream.position=0
mystream.charset="gb2312"
mystream.position=2
bstr=mystream.readtext()
mystream.close
set mystream=nothing
bytes2str=bstr
End Function
'函数名:getRndName
'参数:无 '作用:根据时间获得一个随即字串
Function getRndName()
Randomize()
tempname=now()
tempname=replace(tempname," ","")
tempname=replace(tempname,".","")
tempname=replace(tempname,":","")
tempname=replace(tempname,"-","")
tempname=replace(tempname,"上午","am")
tempname=replace(tempname,"下午","pm")
getRndName=tempname&"-"&cstr(int(Rnd()*10))
End Function
%>