多檔案上傳組件

來源:互聯網
上載者:User
上傳 (因為我還沒完成我的組件,不保證文章中的代碼的正確性.)
上傳多檔案
(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 Next

If Request.ServerVariables("REQUEST_METHOD") = "POST" Then

    Dim objUpload
    Dim lngMaxFileBytes
    Dim strUploadPath
    Dim varResult

    lngMaxFileBytes = 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>"
        Next

    End If

End If
%>

在這裡設定下面兩個變數:
lngMaxFileBytes -  檔案最大位元組數, 和  strUploadPath -檔案上傳位置.我也增加了錯誤處理程式檢查是否裝入組件在網伺服器上適當註冊.這是我做的處理唯一的一個錯誤.如果任何另外的錯誤發生,可以再加入處理它.最後,再聲明varReturn.這變數用來接受組件的傳回值.這傳回值應該包含所有的表單元件名字和他們的值.你能看見FOR NEXT loop中的程式,這傳回值必須是一數組.

這是比較容易的部分.現在我們必須創造一ActiveX 組件,用來處理提交的表單.
開啟vb6,選擇一ActiveX 項目 (參閱步驟1:)

步驟1:
創造一ActiveX dll 項目

首先,先添加一個引用,在菜單條上選定添加引用項,選中
Active Server Pages Object library.(參閱步驟2).

步驟2:
工程引用

通過這個庫我們能使用asp的request的請求對象.為保證能使用,要用如下代碼:

Option Explicit

Private MyScriptingContext As ScriptingContext
Private MyRequest As Request
Private MyResponse As Request

Public Sub OnStartPage(PassedScriptingContext As ScriptingContext)
    Set MyScriptingContext = PassedScriptingContext
    Set MyRequest = MyScriptingContext.Request
    Set MyResponse = MySriptingContext.Response
End Sub

為什麼我們需要ASP庫?通過request對象我們能得到由upload.htm傳來的http資料流.在那裡為什麼有一個 "但是"?當我們嘗試讀 表單欄位名字和相對的值,例如,Request.Form("txtTitle"), 但我們就不能讀出餘下的發送給我們的未經處理資料.因此我們使用Request.TotalBytes 和Request.BinaryRead 讀取發送的資料.

下面是我從Doug Dean得到的代碼:


    '~~~~~ VARIABLES ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Dim varByteCount
    Dim binArray() As Byte

    '~~~~~ BYTE COUNT OF RAW FORM DATA ~~~~~~~~~~~~
&nb



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。