asp文件上传(ASP文件上传原理分析及实现实例)
asp 文件上传(ASP文件上传原理分析及实现实例)摘要:在基于/的应用环境中,上传各种类型的文件一直是困扰用户文件管理应用的难题之一。在HTTP中上传文件有三种机制:RFC1867,PUT和WebDAV。常用的实现方法是利用在RFC1867中引入的一个新类型:File以及ADO Stream对象。本文对上述上传方法及实现原理作了论述,并给出了具体解决实例。 ASP FILE对象 当前,基于/模式的应用比较流行。当用户需要将文件传输到上时,常用方法之一是运行FTP并将每个用户的FTP默认目录设为用户的Web主目录,这样用户就能运行FTP客户程序并上传文件到指定的 Web目录。这就要求用户必须懂得如何使用FTP客户程序。因此,这种解决方案仅对熟悉FTP且富有经验的用户来说是可行的。 如果我们能把文件上传功能与Web集成,使用户仅用Web就能完成上传任务,这对于他们来说将是非常方便的。但是,一直以来,由于File System Object的仅能传送文本文件的局限,所以ASP最大的难题就是文件上传问题。下面介绍的就是如何在基于HTTP协议的网页中实现文件的上传。 一.通过HTTP上传的三种机制 通过HTTP上传有三种机制:RFC1867, PUT 和 WebDAV。 PUT 是在HTTP 1.1引入了一个新的HTTP动词。当web收到一个HTTP PUT和对象名字,它将会验证用户,接收HTTP流的内容,并把它直接存入web。由于这可能会对一个web站点造成破坏,并且还会失去HTTP最大的优势:可编程性。在PUT的情况下,自己处理请求:没有空间让CGI或者ASP应用程序介入。唯一让你的应用程序捕获PUT的方法是在低层操作,ISAPI过滤层。由于相应的原因,PUT的应用很有限。 而WebDAV允许web内容的分布式认证与翻译。它引入了几种新的HTTP动词,允许通过HTTP上传,锁定/解锁,登记/检验web内容。Office 2000中的"Save to web" 就是通过WebDAV来实现的。如果你所感兴趣的一切都是上传内容,WebDAV应用得非常出色,它解决了很多问题。 然而,如果你需要在你的web应用程序里面上传文件,WebDAV对你就毫无用处可言。象HTTP PUT一样,那些WebDAV的动词是被解释的,而不是web应用程序。你需要工作在ISAPI过滤层来访问WebDAV的这些动词,并在你的应用程序中解释内容。 RFC1867 (http://www.ietf.org/rfc/rfc1867.txt) 最终被W3C在HTML3.2中接受前,是作为一种建议标准。它是一种非常简单但是功能很强大的想法:在表单字段中定义一个新类型。
<INPUT TYPE="FILE">
并且在表单本身加入了不同的编码方案,不再使用典型的:
<FORM ACTION="formproc.asp" METHOD="POST">
而是使用:
<FORM ACTION="formproc.asp" METHOD="POST" ENCTYPE="multipart/form-data">
这种编码方案在传送大量数据的时候,比起缺省的"application/x-url-encoded"表单编码方案,显得效率要高得多。URL编码只有很有限的字符集,使用任何超出字符集的字符,必须用'%nn'代替,这里的nn表示相应的2个十六进制数字。例如,即使是普通的空格字符也要用'%20'代替。而RFC1867使用多部分MIME编码,就象通常在e-mail消息中看到的那样,不编码来传送大量数据,而只是在数据周围加上很少的简单但实用的头部。主要的厂商都采用了建议的"浏览..."按钮,用户能很容易的使用本地"打开文件..." 对话框选择要上传的文件。 RFC1867仍然将大多数文件上传的灵活方法留给了你的web应用程序。PUT用得很有限。WebDAV对内容的作者很有用,比如FrontPage用户,但是对想在web应用程序中加入文件上传的web开发者来说很少用到。因此,RFC1867是在web应用程序中加入文件上传的最好的办法。 在实际应用中,免费提供了Posting Acceptor 。ASP不懂"multipart/form-data" 编码方案。取而代之,提供了Posting Acceptor ,Posting Acceptor是一种在上传完成后,接受REPOST到一个ASP页的ISAPI应用程序。 Software Artisans的SA-FileUp是最早的商业Active Server之一。几经改进,现在作为一个纯粹的ASP存在。 二.基于ASP的文件上传实现原理分析 基本原理是:采用ADO Stream对象的BinaryRead方法将FORM中的所有数据读出,从中截取出所需的文件数据,以二进制文件方式存盘。 下面是上传文件页面的一个例子(upload.htm):
<html>
<body>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Submit" VALUE="Upload"></TD>
</form>
</body>
</html>
程序中使用了文件对象,这样在Upload.asp中采用BinaryRead方法读来的原始数据就不仅仅是选择的文件本身的数据,还包含该文件在用户硬盘上的路径、类型、提交页面的表单等相关信息的描述,这样我们就需从中提取出文件的具体内容。根据分析,数据的头部信息与数据的分界线是两对回车换行符,尾部也有分隔信息,我们可以采用类似以下的方法获取文件数据。
Dim FormData.FormSize,DataStart,CLStr,DivStr FormSize=Request.TotalBytes FormData=Request.BinaryRead(FormSize) CLStr=ChrB(13)&ChrB(10) DataStart=InStrB(FormData.CLStr&CLStr)+4 '4是两对回车换行符的长度 DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1) DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2 FormData=MidB(FormData,DataStart,DataSize)
FormData就是文件的内容了。 中间根据需要,可进行相应的处理。最后的工作就是将文件保存了。保存的方法可以有两种:一种是利用VB或VC之类程序中的二进制文件操作方法,在工程中加入适当的类型库,最终编译成DLL文件,使用时再将该DLL文件注册就可以了。文件存贮程序如下:
Public Function SaveFile(Pathname As String) As String Dim objContext As ObjectContext Dim objRequest As Request Set objContext=GetObjectContext() Set objRequest=objContext("Request") '以下的一段代码是进行文件存贮的有关操作 Dim FormData() As Byte,CLStr,DivStr Dim DataStart As Long,DataSize As Long DataSize=objRequest.TotalBytes Redim FormData(DataSize-1) FormData=objRequest.BinaryRead(DataSize) CLStr=ChrB(13) & ChrB(10) DataStart=InStrB(FormData,CLStr & CLStr)+4 DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1) DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2 FormData=MidB(FormData,DataStart,DataSize) '创建一个二进制文件并将FormData写入其中 Open Pathname For Binary As 1 Put #1,,FormData Close #1 SaveFile="OK!" End Function
第二种方法是利用ADO STREAM中提供的二进制文件操作方法来完成,保存文件的语句是: StreamOBJ.SaveToFile (fileName,2)。在 这种操作中,我们可以将有关的操作存放在一个类文件中,在应用时,直接将该类文件包含在ASP程序中就可以了。具体处理方法,请参阅有关介绍。 三.文件上传实现方法实例 实现文件上传可使用或无方式。对于类,比如说microsoft posting acceptor(简称mpa),就是公司发布的一个免费,这类的安装也比较方便。对于的mpa,运行它的安装文件就可以了。而一般的dll形式的,我们则需要进行注册。例如,要使用aspcnUP.dll,只要在Window 2000上执行regsvr32 [path\]aspcnUP.dll,系统出现注册成功的信息提示就可以使用该了;对于无类,如http://www.5xsoft.com/的无上传类-upload_5xsoft。在使用时,只要在处理程序中包含以下的语句就可以了:
<!--#include FILE="upload.inc"--> set upload=new upload_5xSoft '建立上传对象
有关的属性与操作方法,请参阅该的使用手册。 下面是詀spcnUP.dll为例,上传部分类型文件的源代码(upload.asp):
<% @ language="vbscript"
Set fileUP=Server.CreateObject("aspcn.Upload")
fileUP.Maxsize=200000
fileUP.Path="d:\upfile"
fileUP.Upload
For i=0 to fileUP.Count
fieldname=fileUP.FieldName(i)
If fileUP.FileType(fieldname)="zip" Or ileUP.FileType(fieldname)="rar" Then
fileUP.Save fieldname
End If
Next
Set fileUP=Nothing
%>
四.结束语 应用模式还在快速地发展着,在ASP.NET中,已经内置了文件上传的功能,使用非常简单方便。作为一种全新的技术,ASP.NET并不只是ASP的简单升级,它是一个用于Web开发的全新框架,其中包含了许多新的特性。ASP.NET提供了更易于编写、结构更清晰的代码,利用这些代码我们将会更容易地进行再利用和共享,从而开发出更多更实用的程序来。
武夷山币(武夷山流通币,真是凉透了)武夷山币(武夷山流通币,真是凉透了)武夷山流通币人民币发行70周年纪念钞早就是过去时了,已经没有几个人还关注它的一举一动,实际上早就动弹不了了,因为成交量降到了极点,而没有成交量的
贵州社区(社区有个温馨之家)贵州社区(社区有个温馨之家)每天早上十点,8岁的陈吉琴和小伙伴们会如约来到教室,在温馨小家开始了新的学习。这里有老师辅导我们写作业,可以做游戏,有时还能收到礼物(书包玩具)。抚摸着
詹妮弗康纳利裸戏(一代性感早熟女神詹妮弗康纳利)詹妮弗康纳利裸戏(一代性感早熟女神詹妮弗康纳利)上周末,根据奉俊昊导演的电影雪国列车改编的同名美剧在美国TNT电视台首播(5。25上线Netflix)。有点反差的是,相比于电影版国
黄唇鱼图片(黄唇鱼,身价堪比黄金的鱼!)黄唇鱼图片(黄唇鱼,身价堪比黄金的鱼!)黄唇鱼,闽粤人称金钱鮸金钱猛鱼,又名(鱼高),温州人称黄甘。是中国的特有鱼种,黄唇鱼身价之所以能上百万,是因为这种鱼非常罕见切浑身是宝属于国
于洋中华好养生(刘于洋著名养生专家)于洋中华好养生(刘于洋著名养生专家)乐龄诀是于洋老师充分体会到情志因素对人体健康的巨大影响后,亲自执笔编创的一套调摄情志的健康歌诀,加入了乐龄诀的新四维养生法既立足传统中医理论,秉
反汇编工具(Jdk内置的常用工具使用大全)反汇编工具(Jdk内置的常用工具使用大全)jdk的bin目录下面有许多命令,可以很方便地对虚拟机进行监控或者故障排查等工具具体使用bin目录下的命令本质上都是Tools。jar的一
20以内退位减法(20以内的退位减法练习课)20以内退位减法(20以内的退位减法练习课)本单元在最后安排了整理和复习,意图是把本单元学过的20以内的退位减法的计算进行一番回顾和整理,以提升学生对本单元知识的掌握水平。在对20
宋明理学(宋明理学的开山鼻祖)宋明理学(宋明理学的开山鼻祖)花落柴门掩夕晖,昏鸦数点傍林飞。吟余小立阑干外,遥见樵渔一路归。这是宋明理学的开山鼻祖周敦颐的一首小诗。周敦颐,字茂叔,公元1017年生于湖南道县,世
郡主等级(公主也分五个等级)郡主等级(公主也分五个等级)所谓金枝玉叶大抵形容的都是细皮嫩肉的千金骄女了,这词搁在各朝公主身上也着实不假,毕竟皆是天潢贵胄人上人,薰香铜臭里泡大的。唐朝大约是鼎盛时期,自高祖辟唐
烫面蒸饺(白菜虾仁烫面蒸饺)烫面蒸饺(白菜虾仁烫面蒸饺)白菜虾仁烫面蒸饺By雨中漫步kRsJPX这个烫面蒸饺,面皮柔软劲道,馅料鲜美,省事又好吃的早餐,家人们也喜欢原料面粉白菜虾仁花生油蚝油盐开水葱姜花椒粉。
李民浩城市猎人(城市猎人时期的李敏镐!)李民浩城市猎人(城市猎人时期的李敏镐!)一直觉得,城市猎人时期的李敏镐,才是颜值的高峰期。不论是身材还是样貌,都无人能敌。首先,请看这个大长腿。我的长腿欧巴啊还有迷人的起床照,哈哈
桌面图标变大(怎么修改桌面图标大小)桌面图标变大(怎么修改桌面图标大小)怎么修改桌面图标大小方法一通过分辨率修改首先鼠标右键点击桌面出现下拉菜单,再点击下拉菜单下面的属性点击属性以后会出现显示属性窗口,在窗口上面点击
清道夫美剧(伪资深美剧的一份推荐剧单)清道夫美剧(伪资深美剧的一份推荐剧单)正文前的唠叨来张大妈已经一两年了,每次上来只是逛逛好价,看看别人的原创文章。今天正好手上的事全干完,闲来无事,就合计来把写一篇原创也算给自己个
埃博拉病毒(埃博拉病毒有多可怕?)埃博拉病毒(埃博拉病毒有多可怕?)埃博拉一个比新冠肺炎更恐怖的病毒,致死率高达百分之九十,设想一下这个病毒在非洲肆意扫荡时会是一个什么样的情景呢?,今天就带大家深入非洲大陆腹地,看
班级合影(史上最牛班级合影!)班级合影(史上最牛班级合影!)近日,西北工业大学迎来80周年校庆,78级5381班的一张合影刷爆朋友圈。这张合影里有杨伟唐长红和赵霞。杨伟是歼20枭龙歼10双座战斗机总设计师。唐长
海瑞遗物(海瑞,明朝最有名的清官)海瑞遗物(海瑞,明朝最有名的清官)海瑞,字汝贤,海南琼山人,嘉靖二十八年(1549年)举人。他幼年生活困苦,深悉民间疾苦。在担任浙江淳安知县时,海瑞只吃粗米,且命老仆在官署空地自种
自制寿司(最好吃的寿司做法)自制寿司(最好吃的寿司做法)家楼下开了家寿司店,光顾了一下,最便宜的也要18元一份,孩子喜欢,所以想着自己做。By晴子丝琪用料糯米150克胡萝卜1根青瓜一条土鸡蛋2个白醋15克盐2
石油干洗(啊?石油干洗是什么鬼?)石油干洗(啊?石油干洗是什么鬼?)中国石化公众开放日看了上面的漫画,大家肯定会好奇,真的有石油干洗吗?嘿嘿,就让小编为你来科普一下吧!现在市面上的很多衣料皮具因材质不同,其清理方式
华语影片(近五年的华语好电影)华语影片(近五年的华语好电影)曾经,某位导演说中国不缺好电影,缺好观众。阿看对此不以为然。回想近十年的优秀电影,我们热爱电影的观众几乎都押对了宝。无论是现实题材的我不是药神还是动画
嘉兴旅游(用外语助力禾城国际化嘉兴学院学生积极开展嘉兴旅游景点英译工作)嘉兴旅游(用外语助力禾城国际化嘉兴学院学生积极开展嘉兴旅游景点英译工作)今天,通过实地参观嘉兴地方党史陈列馆,我们收获良多。除了对陈列馆的整体结构和组织构成有了更直观的认识,我们更
我会送你红色玫瑰(我会送你红玫瑰,你别拿一生眼泪相对)我会送你红色玫瑰(我会送你红玫瑰,你别拿一生眼泪相对)你会不会忽然地出现,在街角的咖啡店我初次见你,人群中独自美丽我们就这样,各自奔天涯天天想你,天天守住一颗心把我最好的爱留给你我
芽球菊苣(芽球菊苣种后不能见光)芽球菊苣(芽球菊苣种后不能见光)导读酷似白菜,生长过程却不能见光,种植25天采收,1斤40元成高档菜现在生活水平提高了,有时候一家人为了改善伙食,也会去外面好好搓一顿。特别是最近几