网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 设计资源 > 实用代码片段 > 正文

ASP文件无组件直接上传功能

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
的表现形式稍有不同,这可以通过具体分析其二进制代码来了解。

  3、利用ASP技术实现文件存储

  上传文件代码的处理

  1) 获得分割符代码

  从上面的分析我们已经知道,分割符起到了分割多个数据段(包括文本框和各种类型的文件)的重要作用。前面已经分析过,分割符出现在第一个回车换行符号前。因此,通过下面这段程序就可获得分割符代码:

  <%

  newline=chrB(13) & chrB(10) 'newline表示二进制的回车符

  filesize=Request.TotalBytes 'filesize是上传文件的大小

  filedata=Request.BinaryRead(filesize) 'filedata是上传文件的二进制数据

  divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'divider是分割符

  %>

  注:因为这里处理的都是二进制字节码,因此,所有的函数都是使用它的二进制版本,加了"b "。

  2) 获得文件(或文本框)内容

  (1) 预备函数(将二进制串转化成字符串)

  上传文件的内容不需要经过二进制向字符串的转换过程,直接保存就可。但是,若需提取文本框内容或文件的名称,就必须进行转换。因此,需要编写一个通用的,并且适用于汉字的转换函数。以下是该函数代码:

  Function BtoS (bstr)

  If not Is Null (bstr) Then

  for i = 0 to lenb(bstr) - 1

  bchr = midb(bstr,i+1,1)

  If ascb(bchr)>127 Then '汉字是双字节,得两个字符一起处理

  temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr))

  i = i+1

  Else

  temp = temp&chr(ascb(bchr))

  End If

  next

  End If

  BtoS = temp

  End Function

  (2) 获得文件(或文本框)内容

  在实际的WEB应用中,上传操作可能涉及多项内容,如多个文本框、多个文件等等。文件和文本框很好区分,文件的数据中包含了"filename="字串。因此,我们写了如下的通用函数,既可用于提取文件内容,又可提取文本框内容(需进行二进制转换):

  Function getdata(byval data, byval divider, final) 'data表示二进制串;divider表示分割符;final表示数据的结束位置

  filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) '字符串"filename"的二进制表示

  bncrlf=chrb(13)&chrb(10) '二进制的回车符

  startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) ' 开始位置

  endpos = instrb(startpos,data, divider)-lenb(bncrlf) '结束位置

  part1 = midb(data, startpos, endpos-startpos) '两个分割符之间的内容

  firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' 内容之前的说明段

  If (instrb(firstline,filename)=0) Then '若为文本框,获得文本框字符串内容

  stemp=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))

  getdata=BtoS(stemp)

  Else '若为文件,获得文件二进制内容

  Getdata=midb (part1, instrb (part1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (part1)

  -instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))

  End If

  Final=endpos

  End function

  在程序中直接调用该函数就可获得所需文件(或文本框)内容,如下所示:

  <%

  Content=getdata (data, divider, position)

  %>

  3) 获得文件名称

  前面已经分析过了,上传文件数据流的"filename="字段里包含了文件的名称和绝对路 径。一般来说,我们只需提取出路径中的文件名即可,以下是程序代码:

  <%

  namepos=instrrev(B2S(firstline),chr(92)) 'firstline即上面获得的说明部分数据,chr(92)

  表示"/"

  filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) '获得文件名称

  %>

  利用ASP直接实现文件上传功能

  传统的ASP程序员只能利用FILESYSTEMOBJECT对象对文本文件(.txt)进行移动、复制、删除等操作,若需处理二进制对象,则不得不采用本文前面介绍的那些方法来实现。但是,现在ASP中的ADO.STREAM对象可以同时操作文本对象和二进制对象(可以在http://www.microsoft.com/data下载),利用它就可以在ASP中直接实现文件上传功能。下面,我们就介绍其实现过程。

  1)打开STREAM对象

  对于SREAM对象而言,若要进行文件的保存,则必须是将该对象的全部内容进行保存。因此,我们必须要创建两个(或多个)STREAM对象,其中一个为源数据流,即接收初始的二进制数据;另一个为目的数据流,即接收来自经源数据流处理后的数据,并最终保存为所需的文件。

  <%

  set str=server.CreateObject(&q

  • 下一篇资讯: ASP读取文件夹文件
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师