摘要:在基于浏览器/服务器的应用环境中,在浏览器中上传各种类型的文件一直是困扰用户文件管理应用的难题之一。在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"> |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器