深入研究“用ASP上载文件”(转)(一)

    现在“瘦客户”的观点已经是一个神话了,但随着电视或掌上型浏览器的繁荣,这一状况会有所改变。今天绝大多数的网络客户仍使用功能强大的PC,附着着大量的客户端存储器和客户端感兴趣的内容。在Internet协议下,将文件传递到中央服务器有一些方法可供选择,但基于WEB的文件上载比其它方法都要高级。下面来检验这一点。
一、HTTP与FTP的方式比较

   为什么要上载?

  
   文件上载对任何网络应用程序来说都起到重要作用。这里有一些例子,是关于我们的一些客户如何把文件上载并他们的WEB应用程序结合起来的:

   1、基于WEB的e-mail形式,用文件上载给邮件信息增加附件
   2、外部互联网应用程序用文件上载在伙伴间传送文件,如协议证明、软件更新或文件
   3、技术支持站点用文件上载从用户中接收错误记录和有问题文件
   4、企业内部互联网的文献出版用友好的网络接口在用户间分享文件
   5、图形库用文件上载控制提交、产生略图
   6、ISP主机店面用文件上载发送产品图象

   HTTP与FTP的方式比较

   在TCP/IP的早期,FTP是向服务器传输文件的标准机制。它可靠、可接受文本和二进制格式,客户可以在任何地方执行,但是它远远不及HTTP的适应性强。下面来比较一下:

   ■ 可靠性:用FTP上载,要么管理大量的用户帐号,要么就允许匿名访问。用WEB应用程序上载,应用程序可以确定允许谁上载,免除了极大的管理负担。

   ■ 安全性:通过HTTP上载可用SSL编码,这样一来信息可以在传输过程中加密。用FTP就无法作到。

   ■ 配置难易:FTP上载要求管理员精确地调节NTFS许可。用基于HTTP的上载和应用程序,管理员和应用程序都可以决定,如果需要的话。

   ■ 适应性:你想在一个地方存储DOC文件,在另一处存储图形吗?使用FTP的话,用户必须知道这些存储路径。而在WEB应用程序中,你可以自行控制,不用打扰用户就可以进行修改。

   ■ 能力:用WEB应用程序,每次调用都可以动态地控制上载文件的大小,甚至可以根据同一个表单中的信息改变大小。另外还可以冲掉符合一定标准的上载文件,如错误的MIME类型或文件类型。

   ■ 界面的简易友好性:招人喜欢的网页可以提供指导、建议、在线帮助,而基于批处理的FTP是不可能作到的。更重要的是发生错误时,WEB方式可以立刻向用户提供反馈并作出纠正。

   ■ 防火墙支持:出于安全和知识产权方面的考虑,许多机构不允许外部的FTP。通过简单的配置,大多数防火墙都支持HTTP。

   ■ 补充信息:一个HTTP上载(用RFC1867)还提供其它可用信息,例如用户的原始文件名,这在内部互联网环境下特别有用。

   ■ 上载到一个数据库:利用服务器端组件,如SA-FileUp,允许上载到OLE DB数据库。但用FTP,却绝对做不到这点!

   ■ 性能:FTP和HTTP最终都是用TCP协议,这是决定传输性能的决定因素。

   ■ 可靠性及重新上载:FTP和HTTP 1.1都允许传输重新启动。不幸地是许多服务器包括IIS,现在都不能支持任意一种协议的重新上载功能。FTP的重新上载功能将在IIS5版本中实现。

   总之,同WEB本身一样,服务器的可编程性使HTTP上载比FTP具有极大的优势。

   HTTP上载格式

   通过HTTP上载有三种文件机制,它们是RFC1867、PUT和WebDAV。

   HTTP上载方法1:RFC1867

   HTML 3.2最终推出W3C之前的一段时期,RFC1867 (http://info.internet.isi.edu/in-notes/rfc/files/rfc1867.txt) 是IETF的建议标准。首先是Netscape在Navigator 2.0中运行,跟着Microsoft 把它作为IE 3.02 (32-bit) 的附加和IE 3.03 (16-bit)的自带内容。它是一个非常简单但又很强大的概念:定义一个格式域的新类型

   < INPUT TYPE= "FILE" >
   然后向表单中填加不同的编码方案:
   < FORM ACTION="formproc.asp" METHOD="POST" ENCTYPE="multipart/form-data" >
   而不是用典型的:
   < FORM ACTION="formproc.asp" METHOD= "POST" >

   在传输大量数据时,这种编码方案比默认的"application/x-url-encoded"格式编码方案效率高。正如你也许知道的,URL可用的字符集是很有限的。任何超出范围的字符集都要用'%nn'来代替,在这里nn是相应的两位十六进制数。即使是最常用的空格字符也要用'%20'来代替。如果浏览器不得不用效率如此低的编码方法对整个文件进行编码,那么上载文件的传输规模有可能比原始文件大2到3倍。而RFC1867用Multipart MIME编码,就象通常在e-mail信息中所见到的,在传输大量数据时不用编码,而只是在数据周围有几个简单有用的头。

   结果看起来就象一个规则的HTML POST表单,实现上,通过4 KB的表单格式,代表的数据可以是几兆字节。RFC1867还提出了一些有待被浏览器提供者采纳的建议,即TYPE="FILE"语句的一些属性。其中包括:

ACCEPT(接受):接收文件之前允许网站限制将要上载的文件类型。
SIZE(大小):设置单个文件名文本框的大小或允许多个文件使用单个< INPUT > 语句。
MAXLENGTH(长度最大值):在客户端设置的上载文件的最大规模。
通配符和上载路径:虽然RFC有此建议,但IE和 Navigator都不支持通配符和路径上载。
   好在两种浏览器都支持"Browse..."按钮,用户可以用"Open File..."对话框很容易地选出即将上载的文件。

   VALUE子句的使用很有趣。为了用户方便,可以让WEB预先设置表单域的值。但是在这种情况下,它使一些不良网站可以预设上载文件名,加上一个客户端提交的表单,就可不经用户许可而从他们的PC上盗窃文件。1997年夏天,CERT和Bell实验室的一名雇员一起对此发出了安全警告,Netscape和 Microsoft很快就发行了防止预设上载文件的补丁程序。

   最初的RFC1867明确规定:“在用户没有明确要求的情况下,代理不得向其传送任何文件,这一点很重要。”所以浏览器本可以只是简单地发出一个警告对话框,例如“你想向服务器传送文件x, y, z吗?”,而不用完全禁止预设文件名。但是,在IE4.01中出现了一个安全空洞,使网站可以饶过IE现有的安全机制。(见http://www.microsoft.com/windows/ie/security/paste.htm)

   HTTP上载方法2:HTTP PUT

   HTTP 1.1 介绍了一个新的HTTP动词:PUT。当网络服务器收到了一个HTTP PUT 且对象名为("/myweb/image/x.gif"), 它要鉴别用户,取HTTP流的内容并直接存储 到网络服务器。这种方法会给网络带来很大的破坏,因此不常使用。而且它将HTTP 最大的优势---服务器可编程性放弃了。在使用PUT的情况下,由WEB服务器自身处理请求,没有CGI或ASP应用程序介入的空间。应用程序捕捉PUT的唯一方法是在低水平、ISAPI水平上操作。由于各种原因,大多数网络开发人员对此没有兴趣。

   HTTP上载方法3:WebDAV

   WebDAV (http://www.ietf.org/html.charters/webdav-charter.html) 允许网络内容的分布式授权和发布。它引入几个动词,可以对HTTP内容上载、锁定/开锁、进入/退出。我们可以把它看作一个非特有的配置管理(如来源安全)外加网络文件传输。Microsoft已经公开宣布IIS5、Office 2000 及未来IE版本都将支持它。ISP们很愿意把它来取代那些低级、易出故障的FrontPage服务器附加部分的机制。要注意的是它并不是取代FrontPage服务器附加部分,它只是简单地提供低级标准服务来支持服务器附加部分正在进行的更复杂的功能。在98年10月的PDC,你能看到Office 2000通过WebDAV完成了“保存到网络”("Save to web" )这样漂亮的任务。

   听起来很棒,是不是?如果你想上载内容,WebDAV是很好的,它可以解决许多问题。但如果你想在网络应用程序内上载文件,WebDAV就无能为力了。同HTTP PUT一样, WebDAV这个动词是由服务器而不是应用程序来解释的,需要在ISAPI过滤器水平上使用WebDAV动作,并在应用程序中解释内容。

   HTTP上载机制:总结

   在WEB应用程序上载文件时,RFC1867仍然是最灵活的方法。PUT的用途很有限,WebDAV对内容作者,如FrontPage的用户来说很好,但是,它对于那些想往WEB应用程序上增加文件上载的网络开发人员来说,它能做的很少。

时间: 2024-11-01 02:48:31

深入研究“用ASP上载文件”(转)(一)的相关文章

深入研究“用ASP上载文件”(一)

 现在"瘦客户"的观点已经是一个神话了,但随着电视或掌上型浏览器的繁荣,这一状况会有所改变.今天绝大多数的网络客户仍使用功能强大的PC,附着着大量的客户端存储器和客户端感兴趣的内容.在Internet协议下,将文件传递到中央服务器有一些方法可供选择,但基于WEB的文件上载比其它方法都要高级.下面来检验这一点. 一.HTTP与FTP的方式比较 为什么要上载? 文件上载对任何网络应用程序来说都起到重要作用.这里有一些例子,是关于我们的一些客户如何把文件上载并他们的WEB应用程序结合起来的:

深入研究“用ASP上载文件”(二)

二.在ASP中执行现在已经得出结论,RFC1867是在WEB应用程序上载文件的最好方式.那么如何来运行?Microsoft提供了什么方法?其它有哪些方法可以用? Microsoft的Posting Acceptor ASP不支持multipart/form-data编码方式,但是,Microsoft提供了免费的Posting Acceptor(http://www.microsoft.com/iis/support/iishelp/iis/htm/core/pareadme.htm),它是一个I

深入研究“用ASP上载文件”(转)(二)

二.在ASP中执行现在已经得出结论,RFC1867是在WEB应用程序上载文件的最好方式.那么如何来运行?Microsoft提供了什么方法?其它有哪些方法可以用? Microsoft的Posting Acceptor ASP不支持multipart/form-data编码方式,但是,Microsoft提供了免费的Posting Acceptor(http://www.microsoft.com/iis/support/iishelp/iis/htm/core/pareadme.htm),它是一个I

使用ASP实现文件上载(上传)的各种方法

上传 最近做在做项目,涉及到文件上载的问题,找来资料研究了一下.当用户需要将文件传输到服务器上时,常用方法是使用FTP方式,用FTP的话虽然传输稳定,但安全性是个严重的问题,而且FTP服务器读用户库获取权限,这样对于用户使用来说还是不太方便.如果我们能把文件上载功能与Web集成,使用户仅用Web浏览器就能完成上载任务,这对于他们来说将是非常方便的. 网络上有很多介绍ASP上载文件的方法,归结起来有以下三大类实现方法,读者可以根据自己网站的条件和需求来选择合适的方法. 一.服务器组件上载方式: 该

ASP: 浏览器中上载文件的方法与实现

浏览器 ---- 一.问题引入 ---- 在现在的管理信息系统中,比较先进的都已采用浏览器/服务器的模型,在这种模型中都要涉及到客户端与服务器端的信息交互问题,从服务器端到客户端的信息传递技术已经比较成熟,这里主要讨论从客户端到服务器端的文件上载问题,基于Microsoft的IE4.0.IIS4.0.ASP(Active Server Page)和标准HTML语言. ---- 二.实现方法 ---- 在ASP页面中,利用HTML中的Form元素来实现. ---- 在Form元素的语法中,EncT

用ASP和VBScript上载文件(一)

vbscript|vbscript 从浏览器上载文件是从客户机向服务器传递文件的一个简易方法.从第三代浏览器Netscape和 Microsoft起,多数浏览器都可以向服务器上载文件,而不需要向用户提供特殊的访问方式或软件.      一些ASP组件是为文件上载而设计的,例如:   Posting Acceptor   ( Microsoft SiteServer的一部分),   AspSmartUpload(Advantys),   AspUpload (PersistsSoftware),

在 ASP.NET 2.0 中上载文件

asp.net 简介自引入 Microsoft ASP.NET 版本 1.0 之日起,就存在生成 Web 应用程序的内置方法,这些方法能够将文件上载到宿主服务器.这是通过使用 File Field HTML 服务器控件实现的.我以前写过一篇关于如何在 ASP.NET 应用程序中有效使用该控件的 MSDN 文章.本文将再次介绍文件上载过程,但不是使用 File Field 控件,我将向您介绍如何有效使用 ASP.NET 2.0 提供的新 FileUpload 服务器控件. 虽然本文向您介绍新增的

用ASP和VBScript上载文件(二)

vbscript|vbscript 上载脚本的使用       下面是开发的上载脚本的应用范例.本文的下载文件提供例子中的文件和代码.将压缩文件释放到一个路径下,为你的网络服务器配置一个虚拟路径.可以在浏览器中测试和启动uploadForm.html.      调用脚本       下面是调用上载BuildUploadRequest 方法的途径.首先调用一个全程dictionary:UploadRequest.然后调用BuilUploadRequest方法,然后在自变量中传送到请求原始二进制数

用 WebClient.UploadData 方法 上载文件数据

client|web|数据 假如某网站有个表单,例如(url: http://localhost/login.aspx):   帐号   密码      我们需要在程序中提交数据到这个表单,对于这种表单,我们可以使用 WebClient.UploadData 方法来实现,将所要上传的数据拼成字符即可,程序很简单:      string uriString = "http://localhost/login.aspx";   // 创建一个新的 WebClient 实例.   WebC