标题:简单的ASP无组件上传示例及详细说明
只看楼主
anlige
Rank: 3Rank: 3
等 级:新手上路
威 望:7
帖 子:401
专家分:0
注 册:2006-11-3
结帖率:100%
 问题点数:0 回复次数:3 
简单的ASP无组件上传示例及详细说明
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<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>
<a href="http://www. src="http://www. /></a>
本示例由Anlige制作,QQ417833272,Email:zhanghuiguoanlige@  
<hr />
<form name="form1" action="?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)
  set t_stream=server.createobject("adodb.stream")   '初始化stream对象
  t_stream.type=1                                    '设置数据模式为二进制
  t_stream.mode=3                                    '设置读写模式为读和写
  t_stream.open                                      '打开stream对象
  t_stream.write tempdata                            '写入用户提交的数据,写入文件用
  bcrlf=chrb(13)&chrb(10)                            '换行符
  fpos=instrb(1,tempdata,bcrlf)                      '找到第一个换行符位置
  sSplit=midb(tempdata,1,fpos-1)                     '得到数据分割标志
  slen=lenb(ssplit)                                  '得到数据分割标志的长度
  istart=slen+2                                      '表单开始位置
  formend=instrb(istart,tempdata,bcrlf&bcrlf)        '获得表单的结束位置
  formhead=midb(tempdata,istart,formend-istart)      '获得表单相关的文本内容
  str=bytes2str(formhead)                            '将二进制内容转换为文本
  startpos=instr(str,"name=""")+6                    '查找表单名的开始位置,为什么要+6?name="正好6个字符长
  endpos=instr(startpos,str,"""")                    '查找表单名的结束位置
  FormName=mid(str,startpos,endpos-startpos)         '获得表单名
  startpos=instr(str,"filename=""")+10               '获得本地文件路径的开始位置,+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)    '调用函数保存文件
  t_stream.close                                     '关闭stream对象
  set t_stream=nothing                               '销毁stream对象
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()
    dim y,m,d,h,mm,s,r
    Randomize()
    y=year(now)
    m=month(now):if m<10 then m="0"&m
    d=day(now):if d<10 then d="0"&d
    h=hour(now):if h<10 then h="0"&h
    mm=minute(now):if mm<10 then mm="0"&mm
    s=second(now):if s<10 then s="0"&s
    r=cint(rnd()*10):if r<10 then r="0"&r
    getRndName=y&m&d&h&mm&s&r
 End Function
%>
搜索更多相关主题的帖子: 文件上传 示例 详细说明 
2008-08-16 13:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-228589-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019068 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved