简单的单文件上传

花几个小时写的一个简单的单文件上传示例,里面附带详细的函数说明(主体函数每句都有) 在这里不是说我的水平有多高,只是和大家分享下,希望对一些朋友有些帮助 注意:此例只是上传单个文件,可以根据本示例的说明去研究以下别人写的无组件上传类(我的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
%>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Anlige

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值