已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
利用ASP技术实现文件直接上传功能 采用WEB技术实现B/S(浏览器/服务器)结构的管理系统是办公自动化的发展趋势。基于WEB技术的管理系统,由于开发周期短;与用户平台无关;易于实现交互式应用;能对信息进行快速、高效的收集、处理和发布,近几年来得到了迅速发展。而ASP技术由于其开发效率高、交互性好,安全性强等特点,逐渐成为开发管理系统的首选工具。许多基于WEB的应用都涉及文件上传操作。常见的文件上传技术有:基于HTTP协议的;基于VB(或DELPHI等编程语言)开发的文件上传组件的;基于数据库技术的等等。这些方法一般都需要编程者能同时掌握WEB技术、数据库技术或CGI技术或组件技术,对编程者的要求较高。而本文将介绍的利用ASP技术直接实现文件上传功能则只需编程者掌握单一的ASP技术即可,大大降低了编程难度。几种文件上传技术的比较1、基于HTTP协议该方法需要编程者利用第三方软件,如DELPHI、VB等,在应用程序中先进行HTTP协议编程,然后将待上传文件内容按HTTP协议的格式打包,最后向WEB服务器发送上传的请求报文,从而实现文件的上传。因为DELPHI和VB不能编写完整的WEB网络程序,只能编写WEB小应用程序,因此,该方法只用于功能受限的网络应用。2、基于VB(或DELPHI等)开发的文件上传组件该方法利用VB(或DELPHI等编程语言)开发ASP服务器组件,实现特定的文件上传服务。它首先利用ASP表单功能将文件(二进制格式)从用户端上传到服务器端,然后使用VB开发的组件,对二进制文件进行处理,成为可以正常读写的文件。该方法要求编程者不仅掌握ASP语言,而且还能利用VB等第三方语言进行组件编程,增加了开发的难度。3、基于数据库技术该方法和上个方法有类似之处。不同的地方在于对上传的二进制文件的处理上。它使用数据库来保存二进制文件。无论是小型数据库还是大型数据库都提供了存储二进制数据的数据类型,只要以Append Chunk方式将数据存入相应的字段就可以了。该方法虽然简单可行,但是因为每次上传的文件大小都是不一样的,因此,会对数据库的空间造成很大的浪费,降低了数据的访问速度;并且使得文件只能在数据库环境下进行访问,造成了很大的不便。实例分析但是,利用ASP技术直接实现文件上传功能则只需编程者掌握单一的ASP技术即可,大大降低了编程难度。下面我们将通过一个实例来介绍如何使用该方法。1、文件上传表单首先需要编写一个能提供文件上传功能的表单,程序如下所示:上传文件: 其中,enctype参数用来设置表单的MIME编码方式,在进行文件(或同时包含文本框)上传时,必须将其属性设置为multipart/form-data;upload.asp是服务器端对接收到的二进制文件流进行处理的ASP程序,在本文的后面将陆续介绍其内容。2、上传文件格式分析在处理文件之前,我们要先了解上传的文件的具体格式,通过编写下面一段简单的ASP程序就可以查看其二进制代码: 分析浏览器上显示的上传文件的二进制代码,发现代码包括四个部分(若同时上传多个文件或文本框,则代码按上传的先后次序排列,格式相同),每一部分的内容是用回车换行符号来进行分隔的:1)第一部分(起始标志)-7d329631b04d4 2)第二部分(文件说明)Content-Disposition: form-data; name=file1; filename=C:Documents and SettingsAdministratorMy DocumentsInvitation.doc Content-Type: application/msword 在此,我们可以获得上传文件的文件名称及绝对路径,也可以获得文件类型。这些信息是正确保存文件所不可缺少的。 3)第三部分(文件内容)即文件的二进制内容,略。4)第四部分(结束标志)-7d329631b04d4结合第一部分和第四部分的内容来看,-7d329631b04d4(每次上传,数值都不一样)起到了分割符的作用,它标志着一段数据(当有多个上传内容时)的开始和结束。从保存文件所需要的信息来讲,我们首先需要从第二部分数据的filename中获得文件名称,然后需要正确定位文件的起始位置,最后利用ASP技术将二进制文件用本来的文件名保存即可。若同时上传多个内容(如多个文本框和文件),也是按同样的方法处理,每部分的内容都包含在分割符之中,只是文本框和文件的表现形式稍有不同,这可以通过具体分析其二进制代码来了解。3、利用ASP技术实现文件存储上传文件代码的处理1) 获得分割符代码从上面的分析我们已经知道,分割符起到了分割多个数据段(包括文本框和各种类型的文件)的重要作用。前面已经分析过,分割符出现在第一个回车换行符号前。因此,通过下面这段程序就可获得分割符代码: 注:因为这里处理的都是二进制字节码,因此,所有的函数都是使用它的二进制版本,加了b 。2) 获得文件(或文本框)内容(1) 预备函数(将二进制串转化成字符串)上传文件的内容不需要经过二进制向字符串的转换过程,直接保存就可。但是,若需提取文本框内容或文件的名称,就必须进行转换。因此,需要编写一个通用的,并且适用于汉字的转换函数。以下是该函数代码:Function BtoS (bstr) If not Is Null (bstr) Thenfor 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 在程序中直接调用该函数就可获得所需文件(或文本框)内容,如下所示: 3) 获得文件名称前面已经分析过了,上传文件数据流的filename=字段里包含了文件的名称和绝对路 径。一般来说,我们只需提取出路径中的文件名即可,以下是程序代码: 利用ASP直接实现文件上传功能传统的ASP程序员只能利用FILESYSTEMOBJECT对象对文本文件(.txt)进行移动、复制、删除等操作,若需处理二进制对象,则不得不采用本文前面介绍的那些方法来实现。但是,现在ASP中的ADO.STREAM对象可以同时操作文本对象和二进制对象(可以在/data下载),利用它就可以在ASP中直接实现文件上传功能。下面,我们就介绍其实现过程。1)打开STREAM对象对于SREAM对象而言,若要进行文件的保存,则必须是将该对象的全部内容进行保存。因此,我们必
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 橱窗展示设计美学调研
- 磨砺奋斗教育体系构建
- 商务酒会流程标准化执行方案
- 帮忙做家务课件
- 家庭教育落地实施策略
- 防蚊虫健康教育课
- 背部按摩操作流程规范
- 金宝贝市场活动方案
- 肾内科CKD晚期护理措施
- 保险会议标准化流程
- 当代中国经济教学知识考试复习题库(附答案)
- 2025-2026学年统编版道德与法治八年级下册期中模拟检测试题(含答案)
- 髋臼骨折诊疗指南
- 2025年人寿保险公司基本法
- 发药差错防范培训
- 2026年中国银行金融科技岗笔试考前核心考点练习题及解析
- 市县医院骨科、麻醉科加速康复实施管理专家共识解读课件
- 2021北京市中考数学真题及答案解析
- (新教材)2026年人教版一年级下册数学 七 复习与关联 第3课时 图形的认识 课件
- DB15∕T 3360-2024 饲草大麦裹包青贮技术规程
- 设计师分享大会
评论
0/150
提交评论