深入研究“用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),它是一个ISAPI应用程序,上载结束后,产生一个到ASP页的重新投递。(见 Scott Stanfield的文章 issue of MIND(98年七月))。

   Software Artisans的SA-FileUp

   SA-FileUp(http://www.softartisans.com/softartisans/saf.html)是最早的商业活动服务器组件(Active Server Components)之一。第一版是97年5月开始使用的,现在全世界包括Microsoft.com在内的上千个网站都在使用它。早期的Beta版本用ISAPI过滤器和活动服务器组件的联合体与ASP结合起来。接着,Microsoft推出了ASP 1.0b(ASP.DLL 1.15.14.0),提供了一种新方法:Request.BinaryRead(二进制读请求)。二进制读方法使浏览器中的原始未加工数据可以被活动服务器组件使用。这样一来,SA-FileUp就不再需要ISAPI过滤器,而作为一个ASP组件存在了。

   SA-FileUp使用二进制读请求,而不是通过表单对象。这样是有意义的:你怎能一边从浏览器读原始数据流,又同时把它作为表信息来解析呢?为了照顾ASP开发人员,SA-FileUp 在它自己的表集里重新提供了所有的表请求 功能。这样使习惯于使用表请求的ASP编程人员对SA-FileUp 能够更加熟悉。

   Posting Acceptor与SA-FileUp 之比较

   现在就PA和SA-FileUp进行一个尽可能客观的比较:

   ■ 与ASP的结合性:SA-FileUp在ASP中是完全可脚本化的,它可以与ASP应用程序很好地结合起来, 而不是作为一个独立的ISAPI DLL存在。

   ■ 标准支持性:从IE浏览器进行PA上载要使用其特有的WebPost API,所以不如RFC1867, 使用PA,对于Netscape和IE用户要使用不同的格式。

   ■ 匿名连接:由于PA使用一个ISAPI DLL,在ASP应用程序以外它就必须提供额外的安全保护。因此在默认状态下PA不允许一切匿名连接。PA 1.1可以允许匿名上载,但是因为有一个上载的编程控制,这里仍然有一定的危险。由于SA-FileUp已经和ASP结合在一起,应用程序可以决定适当的安全度,包括匿名。

   ■ 上载控制:上载正在发送时,PA不允许任何控制。但是用SA-FileUp,可以限制上载的规模或实时决定取消上载。而最好的一点在于可以动态改变上载的位置。

   ■ 处理过程:PA有两步:上载和重新投递。用SA-FileUp,一切都可以一步完成,例如根据上载的状态写数据库。

   ■ 上载到一个数据库:PA只能上载到文件,SA-FileUp可上载到文件和数据库。

   ■ “文件名中的空格”:当处理含有空格的文件名时,PA存在问题;SA-FileUp就没有这样的漏洞。

   ■ 价格:PA可从Microsoft免费下载,与NT选项软择包捆绑在一起。而SA-FileUp不是免费的:它是有支持的商业组件。

   Vertigo Software的总裁Scott Stanfield(http://www.vertigosoftware.com/), 是MIND杂志98年7月号上Post Accetpor文章的作者,MIND上的文章发表之后,在 Software Artisans 上关于SA-FileUp,他又写道:“知道了[SA-FileUp]非常兴奋,这真是奇妙而有价值的产品。”

   共同的支持问题

   到现在为止,有关文件上载的支持问题主要是与安全有关的。通常网站都过分小心地保护NTFS 许可,它可以防止匿名用户帐号向文件目的地址中进行写入。而且即使是 高级服务器管理员也经常错误理解安全的含义。

   要记住,IIS/ASP在一个特别的安全环境下运行每个ASP页。如果没有鉴别机制(没有Basic,没有NT Challenge/Response),每一页都作为匿名用户执行。网络管理员可以设置与匿名用户相应的NT帐号。

   对于IIS3,默认的匿名用户是IUSR_< computername >。

   对于IIS4,所有运行中的网络应用程序的默认匿名用户都是IUSR_< computername >(“在单独的内存空间运行”不被查看)。所有运行以外的应用程序的默认匿名用户是 IWAM_< computername > (“在单独的内存空间运行”被查看)。

   使用SA-FileUp时,必须保证适当的用户对目的路径有读、写、删除许可。

   如果鉴别功能发挥作用,在运行ASP页的过程中IIS/ASP 就将扮演已经鉴别的用户。 因此经鉴别用户的注册帐号对目的路径必须有读、写、删除许可。

   对IIS安全的深入讨论已经超过了本文的范围,the IIS 4 Resource Kit有很好的解释。

   一些代码

   理论已经足够了,下面来看一些ASP代码。

   单个文件上载

   下面是单个文件上载的一个简单的HTML格式。

    < HTML > < HEAD >     < TITLE >Please Upload Your File< /TITLE >    
    < /HEAD > < BODY >     < form enctype="multipart/form-data" method="post" action="formresp.asp" >
       Enter filename to upload: < input type="file" name="f1" >     < input type="submit" > < /form >     < /BODY > < /HTML >
   下面是文件'formresp.asp':

   < %@ LANGUAGE="VBSCRIPT" % >
   < HTML >< HEAD > < TITLE >Upload File Results< /TITLE > < /HEAD >
   < BODY > Thank you for uploading your file.
   < % Set upl = Server.CreateObject("SoftArtisans.FileUp") % >
   < % upl.SaveAs "C: empupload.out" % >
   Total Bytes Written: < %=upl.TotalBytes% >
   < /BODY > < /HTML >

   有附加表单元素的文件上载

   增加附加表单元素非常简单。只要正确指定ENCTYPE,它就象任何普通HTML文件一样运行。

    < HTML > < HEAD > < TITLE >Please Upload Your File< /TITLE >    
    < /HEAD > < BODY >
    < form enctype="multipart/form-data" method="post" action="mformresp.asp" >
      Enter description: < input type="text" name="descrip" >      Enter filename to upload: < input type="file" name="f1" >     < input type="submit" > < /form >
    < /BODY > < /HTML >
   下面是文件'mformresp.asp':

    < %@ LANGUAGE="VBSCRIPT" % > < HTML >< HEAD > < TITLE >Upload
       File Results< /TITLE > < /HEAD >
    < BODY >
       Thank you for uploading your file.       < % Set upl = Server.CreateObject("SoftArtisans.FileUp") % >
       < % upl.SaveAs  "C:    empupload.out" % >       Your description is: '< %=upl.Form("descrip")% >'       Total Bytes Written: < %=upl.TotalBytes% >
    < /BODY > < /HTML >
   多文件上载

   由于浏览器不支持SIZE= 属性,对多文件的情况就必须在每个文件中都使用一个额外的< INPUT >语句。

    Enter first filename: < input type="file" name="f1" >     Enter second filename: < input type="file" name="f2" >
   格式处理是一样的:

    < %@ LANGUAGE="VBSCRIPT" % > < HTML >< HEAD >
    < TITLE >Multiple File Upload Results< /TITLE > < /HEAD >
    < BODY >
      Thank you for uploading your files.      < % Set upl = Server.CreateObject("SoftArtisans.FileUp") % >       < % upl.Form("f1").SaveAs "C:    empupload1.out" % >       Total Bytes Written for file 1: < %=upl.Form("f1").TotalBytes% >       < % upl.Form("f2").SaveAs "C:    empupload2.out" % >       Total Bytes Written for file 2: < %=upl.Form("f2").TotalBytes% >     < /BODY > < /HTML >
   限制上载规模

   要限制上载规模,只需要设置一个属性:

    < %@ LANGUAGE="VBSCRIPT" % > < HTML >< HEAD >      < TITLE >Upload File Results< /TITLE > < /HEAD >      < BODY > Thank you for uploading your file.     < % Set upl = Server.CreateObject("SoftArtisans.FileUp") % >      < % upl.MaxBytes = 1000 '--- limit the upload size to 1000 bytes % >       The maximum size that you are permitted to upload is < %=upl.MaxBytes% >       bytes per file.     < % upl.SaveAs "C:    empupload.out" % > Total Bytes Written:      < %=upl.TotalBytes% >      Server Filename: < %=upl.ServerName% >      Total Bytes Transmitted by you: < %=Request.TotalBytes% >      < /BODY > < /HTML >         
   第1000个字节后的内容都将被删除,WEB服务器的磁盘就不会不必要地被占满。

   结论

   在WEB应用程序中实现上载文件非常简单:区区两行ASP代码就能完成。HTTP/RFC1867文件上载因服务器提供的丰富的编程环境成为首选。SA-FileUp作为与ASP结合的活动服务器组件,比Microsoft的Posting Accetpro有明显优势。

时间: 2024-10-01 04:17:03

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

深入研究“用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上载文件”(一)

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

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

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

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

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

用ASP和VBScript上载文件(二)

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

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 服务器控件. 虽然本文向您介绍新增的

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

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