深圳 王发军
ASP(Active Server Page)是微软公司的产品,由于它编程很容易上手,能快速开发功能强大的动态网站,现在很多网站(特别是Intranet/Extranet内部网)采用了NT+IIS+ASP的模式,使得ASP成为目前较为流行的网站开发脚本语言。在WEB服务中,文件上载服务是一个很常见的功能,而WIN9X下的PWS没有提供相关组件;NT下的IIS提供了一个Post Acceptor组件,但由于它要检查用户的WWW访问权限而变得不太好用;也可以从Internet上下载有关组件,但这些大多都是商业组件,用于
下载的是试用版,在使用时间或功能上都有限制。由于ASP可以调用标准的OLE/COM组件,我们可以用VB/VC/DELPHI等高级编程工具根据我们自己的要求来定制自己的ASP文件上载组件,满足自己的应用系统要求。
下面将讨论用DELPHI为ASP开发文件上载组件的原理和具体实现过程。
一、文件上载的实现原理
基于Web方式数据上传,要遵从RFC1867标准,上载的文件数据也不例外。如用下面HTML页面文件(delphiup.htm)选择上载文件:
<!-- DelphiUp.htm:文件上载界面 -->
<html><head><title>文件上载</title></head><body>
用DELPHI编写的文件上载组件实现文件上载
<form NAME="UploadForm" ACTION="delphiup.
asp" METHOD="POST" ENCTYPE="multipart/form-data">
<p>文件另存为:<input TYPE=text NAME="SaveAs">
<p>请要选择上载的文件:<input TYPE=file NAME="FileData">
<input type="submit" name="b1" value="确认上载"> </p>
</form>
</body></html>
当客户端选择了一个文件(如Test.TXT,其内容为“这里是一个用于上载的文件的内容。”)并按
“确认上载”按钮提交数据后,服务器端
程序收到的数据将具有如下形式:
-----------------------------7cf1d6c47c#13#10
Content-Disposition: form-data; name="SaveAs"#13#10#13#10
NewFileName#13#10
-----------------------------7cf1d6c47c#13#10
Content-Disposition: form-data; name="FileData"; filename="D:\test.txt"
Content-Type: text/plain#13#10#13#10
这里是一个用于上载的文件的内容。#13#10
-----------------------------7cf1d6c47c#13#10
Content-Disposition: form-data; name="b1"#13#10#13#10
确认上载#13#10
-----------------------------7cf1d6c47c--
其中,“-----------------------------7cf1d6c47c”是分界符,用于分隔表单(Form)中的各个域;
#13#10是回车换行符的DELPHI表示。我们可以这样认为,每个表单域的信息描述,都是以分界符加一对回车换行符#13#10开始;表单域名以“name="”开始,以“"”为结束;表单域值以两对回车换行符#13#10#13#10开始,以一对回车换行符#13#10#加分界符结束;文件名称以“filename="”开始,以“"”为结束。有了这些标志,我们就可以获取表单域的名称和值以及要上载的文件的名称,从而实现文件数据的读取和存储了。
二、文件上载的实现过程
在理解上面提到的数据格式后,自己动手编写一个文件上载组件对我们来说已经不是困难了。
(一)开始建立一个ASP组件的工程
如果您对用DELPHI开发OLE Automation Server的步骤不太熟悉的话,请参见《电子与电脑》1999年第06期的一篇文章《用DELPHI开发用于ASP的OLE Automation Server 》。
这里只简要介绍一下操作步骤。
1