多文件上传组件

(因为我还没完成我的组件,不保证文章中的代码的正确性.)
上传多文件
(Sander Duivestein)
介绍
这是我写的一个上传文件的activex的组件.这个组件是使用winsocket 控件调用FTP提交文件.它仅仅工作在Ie3.02或更高的版本,但有些客户端使用Netscape,因此不得不找另外的解决方案.但我搜索 Internet 和若干新闻组时,发现不止我一个有这样的要求.
在1999.3.11, 看到啦Doug Dean的一篇15Seconds的文章(关于用VB asp 组件上传文件)给我啦一个很好的提示.

Doug Dean的组件简单并且易用.但他说,然而,多元件的上传问题没解决?因而仍然有一些工作要完成.

在我开始做自己的组件以前,我想知道其他类似控件提供什么样的功能.因此我看啦另外3个著名的组件:
the upload component of Software Artisans, the upload component of ASPUpload,and the Microsoft Posting Acceptor.

通过比较这些组件我觉的我的组件应该满足下列要求:

提交文件的HTML表单对asp 组件应该是一黑盒子.也就是说组件能接受各种表单元件并能得到表单元件的名字和值.
它应能提供一个上传路径,并且限制大小.
组件应该能处理多个的文件.
组件应该有一错误处理程序.
组件应该性能很好.
组件应该能在NC中象IE一样工作.
保存文件进入数据库.
仅允许某组用能上载文件.
这些对我来说是有相当的挑战.
解决问题
首先我要创建一HTML文件,它包含两个元件:一简单的文本框,一文件框.这里给出下列代码:
1:Upload.htm

<HTML>
 <HEAD><TITLE>Upload</TITLE></HEAD>
 <BODY>
 <FORM NAME="frmUpload" METHOD="Post" ENCTYPE="multipart/form-data" ACTION="Upload.asp"> <TABLE>
 <TR><TD>Author</TD><TD><INPUT TYPE="text" NAME="txtAuthor"></TD></TR>
 <TR><TD>File</TD><TD><INPUT TYPE="file" NAME="txtFileName"></TD></TR>
 <TR><TD COLSPAN="2" ALIGN="right"><INPUT TYPE="Submit" VALUE="Upload"></TD></TR>
 </TABLE>
 </FORM>
 </BODY>
 </HTML>

使用ENCTYPE="multipart/form-data" 使表单能够提交一文件.我们也需要一文件接收文件.
2:Upload.asp

<%@ Language=VBScript %>
<%
 Option explicit
 Response.Buffer = True
 On Error Resume NextIf Request.ServerVariables("REQUEST_METHOD") = "POST" Then
Dim objUpload
 Dim lngMaxFileBytes
 Dim strUploadPath
 Dim varResultlngMaxFileBytes = 10000
 strUploadPath = "c:\inetpub\wwwroot\upload\"

 Set objUpload = Server.CreateObject("pjUploadFile.clsUpload")
 If Err.Number <> 0 Then
 Response.Write "The component wasn't registered"
 Else
 varResult = objUpload.DoUpload (lngMaxFileBytes, strUploadPath)
 Set objUpload = Nothing
 Dim i
 For i = 0 to UBound(varResult,1)
 Response.Write varResult(i,0) & " : " & varResult(i,1) & "<br>"
 NextEnd If
End If
 %>

在这里设置下面两个变量:
lngMaxFileBytes - 文件最大字节数, 和 strUploadPath -文件上传位置.我也增加了错误处理程序检查是否装入组件在网服务器上适当注册.这是我做的处理唯一的一个错误.如果任何另外的错误发生,可以再加入处理它.最后,再声明varReturn.这变量用来接受组件的返回值.这返回值应该包含所有的表单元件名字和他们的值.你能看见FOR NEXT loop中的程序,这返回值必须是一数组.