知识大全 利用ASP技术实现文件直接上传功能

Posted 文件

篇首语:春蚕到死丝方尽,人至期颐亦不休。一息尚存须努力,留作青年好范畴。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 利用ASP技术实现文件直接上传功能相关的知识,希望对你有一定的参考价值。

利用ASP技术实现文件直接上传功能  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   引言    采用WEB技术实现B/S(浏览器/服务器)结构的管理系统是办公自动化的发展趋势 基于WEB技术的管理系统 由于开发周期短 与用户平台无关 易于实现交互式应用 能对信息进行快速 高效的收集 处理和发布 近几年来得到了迅速发展 而ASP技术由于其开发效率高 交互性好 安全性强等特点 逐渐成为开发管理系统的首选工具     许多基于WEB的应用都涉及文件上传操作 常见的文件上传技术有 基于HTTP协议的 基于VB(或DELPHI等编程语言)开发的文件上传组件的 基于数据库技术的等等 这些方法一般都需要编程者能同时掌握WEB技术 数据库技术或CGI技术或组件技术 对编程者的要求较高 而本文将介绍的利用ASP技术直接实现文件上传功能则只需编程者掌握单一的ASP技术即可 大大降低了编程难度      几种文件上传技术的比较     基于HTTP协议    该方法需要编程者利用第三方软件 如DELPHI VB等 在应用程序中先进行HTTP协议编程 然后将待上传文件内容按HTTP协议的格式打包 最后向WEB服务器发送上传的请求报文 从而实现文件的上传 因为DELPHI和VB不能编写完整的WEB网络程序 只能编写WEB小应用程序 因此 该方法只用于功能受限的网络应用      基于VB(或DELPHI等)开发的文件上传组件    该方法利用VB(或DELPHI等编程语言)开发ASP服务器组件 实现特定的文件上传服务 它首先利用ASP表单功能将文件(二进制格式)从用户端上传到服务器端 然后使用VB开发的组件 对二进制文件进行处理 成为可以正常读写的文件 该方法要求编程者不仅掌握ASP语言 而且还能利用VB等第三方语言进行组件编程 增加了开发的难度      基于数据库技术    该方法和上个方法有类似之处 不同的地方在于对上传的二进制文件的处理上 它使用数据库来保存二进制文件 无论是小型数据库还是大型数据库都提供了存储二进制数据的数据类型 只要以Append Chunk方式将数据存入相应的字段就可以了 该方法虽然简单可行 但是因为每次上传的文件大小都是不一样的 因此 会对数据库的空间造成很大的浪费 降低了数据的访问速度 并且使得文件只能在数据库环境下进行访问 造成了很大的不便      实例分析    但是 利用ASP技术直接实现文件上传功能则只需编程者掌握单一的ASP技术即可     大大降低了编程难度 下面我们将通过一个实例来介绍如何使用该方法      文件上传表单    首先需要编写一个能提供文件上传功能的表单 程序如下所示     <Form action= upload asp method=post enctype= multipart/form data >  上传文件 <Input type=file name=file ><br>  <input type=submit name=upload value= 上传 >  </form>    其中 enctype参数用来设置表单的MIME编码方式 在进行文件(或同时包含文本框)上传时 必须将其属性设置为 multipart/form data upload asp是服务器端对接收到的二进制文件流进行处理的ASP程序 在本文的后面将陆续介绍其内容      上传文件格式分析    在处理文件之前 我们要先了解上传的文件的具体格式 通过编写下面一段简单的ASP程序就可以查看其二进制代码     <%  filesize=Request TotalBytes 获得上传文件的大小  filedata=Request BinaryRead(filesize) 获得上传文件的二进制数据  Response BinaryWrite filedata 在浏览器上显示二进制数据  %>    分析浏览器上显示的上传文件的二进制代码 发现代码包括四个部分(若同时上传多个文件或文本框 则代码按上传的先后次序排列 格式相同) 每一部分的内容是用回车换行符号来进行分隔的      )第一部分(起始标志)   d b d    )第二部分(文件说明)    Content Disposition: form data; name= file ; filename= C:\\Documents and Settings\\Administrator\\My Documents\\Invitation doc Content Type: application/msword    在此 我们可以获得上传文件的文件名称及绝对路径 也可以获得文件类型 这些信息是正确保存文件所不可缺少的      )第三部分(文件内容)    即文件的二进制内容 略      )第四部分(结束标志)     d b d     结合第一部分和第四部分的内容来看 d b d (每次上传 数值都不一样)起到了分割符的作用 它标志着一段数据(当有多个上传内容时)的开始和结束 从保存文件所需要的信息来讲 我们首先需要从第二部分数据的 filename 中获得文件名称 然后需要正确定位文件的起始位置 最后利用ASP技术将二进制文件用本来的文件名保存即可 若同时上传多个内容(如多个文本框和文件) 也是按同样的方法处理 每部分的内容都包含在分割符之中 只是文本框和文件的表现形式稍有不同 这可以通过具体分析其二进制代码来了解      利用ASP技术实现文件存储    上传文件代码的处理     ) 获得分割符代码    从上面的分析我们已经知道 分割符起到了分割多个数据段(包括文本框和各种类型的文件)的重要作用 前面已经分析过 分割符出现在第一个回车换行符号前 因此 通过下面这段程序就可获得分割符代码     <%  newline=chrB( ) & chrB( ) newline表示二进制的回车符  filesize=Request TotalBytes filesize是上传文件的大小  filedata=Request BinaryRead(filesize) filedata是上传文件的二进制数据  divider=leftB(filedata clng(instrb(filedata newline)) ) divider是分割符  %>    注 因为这里处理的都是二进制字节码 因此 所有的函数都是使用它的二进制版本 加了 b      ) 获得文件(或文本框)内容    ( ) 预备函数(将二进制串转化成字符串)    上传文件的内容不需要经过二进制向字符串的转换过程 直接保存就可 但是 若需提取文本框内容或文件的名称 就必须进行转换 因此 需要编写一个通用的 并且适用于汉字的转换函数 以下是该函数代码     Function BtoS (bstr)  If not Is Null (bstr) Then  for i = to lenb(bstr)   bchr = midb(bstr i+ )  If ascb(bchr)> Then 汉字是双字节 得两个字符一起处理  temp = temp&chr(ascw(midb(bstr i+ )&bchr))  i = i+   Else  temp = temp&chr(ascb(bchr))  End If  next  End If  BtoS = temp  End Function    ( ) 获得文件(或文本框)内容    在实际的WEB应用中 上传操作可能涉及多项内容 如多个文本框 多个文件等等 文件和文本框很好区分 文件的数据中包含了 filename= 字串 因此 我们写了如下的通用函数 既可用于提取文件内容 又可提取文本框内容(需进行二进制转换)     Function getdata(byval data byval divider final) data表示二进制串 divider表示分割符 final表示数据的结束位置  filename=chrb( )&chrb( )&chrb( )&chrb( )&chrb( )&chrb( )&chrb( )&chrb( )&chrb( )&chrb( ) 字符串 filename 的二进制表示  bncrlf=chrb( )&chrb( ) 二进制的回车符  startpos = instrb(data divider)+lenb(divider)+lenb(bncrlf) 开始位置  endpos = instrb(startpos data divider) lenb(bncrlf) 结束位置  part = midb(data startpos endpos startpos) 两个分割符之间的内容  firstline = midb(part instrb(part bncrlf) ) 内容之前的说明段  If (instrb(firstline filename)= ) Then 若为文本框 获得文本框字符串内容  stemp=midb(part instrb(part bncrlf&bncrlf)+lenb(bncrlf&bncrlf) lenb(part ) instrb(part bncrlf&bncrlf)+lenb(bncrlf&bncrlf))  getdata=BtoS(stemp)  Else 若为文件 获得文件二进制内容  Getdata=midb (part instrb (part bncrlf&bncrlf)+lenb (bncrlf&bncrlf) lenb (part )   instrb(part bncrlf&bncrlf)+lenb(bncrlf&bncrlf))  End If  Final=endpos  End function    在程序中直接调用该函数就可获得所需文件(或文本框)内容 如下所示     <%  Content=getdata (data divider position)  %>     ) 获得文件名称  前面已经分析过了 上传文件数据流的 filename= 字段里包含了文件的名称和绝对路 径 一般来说 我们只需提取出路径中的文件名即可 以下是程序代码     <%  namepos=instrrev(B S(firstline) chr( )) firstline即上面获得的说明部分数据 chr( )  表示 /   filename=midb(firstline namepos+ lenb(firstline) namepos ) 获得文件名称  %>    利用ASP直接实现文件上传功能    传统的ASP程序员只能利用FILESYSTEMOBJECT对象对文本文件( txt)进行移动 复制 删除等操作 若需处理二进制对象 则不得不采用本文前面介绍的那些方法来实现 但是 现在ASP中的ADO STREAM对象可以同时操作文本对象和二进制对象(可以在下载) 利用它就可 cha138/Article/program/net/201311/13931

相关参考

知识大全 asp限制上传文件大小实例

  一款利用asp文件上传组件把文件上传到服务器之前进行判断文件大小否超过指定大小了本实例讲的是upload_xsoft文件上传组件哦filefilesize>就可以限制文件为多少klishix

知识大全 asp 文件上传aspjpeg组件上传文件

cha138/Article/program/net/201311/14386

知识大全 ASP+上传文件语法

ASP+上传文件语法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这里有一个怎样用ASP+上传

知识大全 ASP.NET入门教程 8.6 改善图片上传功能[3]

ASP.NET入门教程8.6改善图片上传功能[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 ASP.NET入门教程 8.6 改善图片上传功能[1]

ASP.NET入门教程8.6改善图片上传功能[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 ASP.NET入门教程 8.6 改善图片上传功能[2]

ASP.NET入门教程8.6改善图片上传功能[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&

知识大全 在ASP.NET中如何进行文件上传?

在ASP.NET中如何进行文件上传?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!上传文件的步骤:

知识大全 Asp.NET大文件上传组件---提取文件内容

Asp.NET大文件上传组件---提取文件内容  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为

知识大全 ASP.NET中文件上传下载方法集合

ASP.NET中文件上传下载方法集合  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  文件的上传下

知识大全 ASP文件上传原理分析及实现实例

ASP文件上传原理分析及实现实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要在基于/的应