通過網頁實現文件上傳 
 

我們建設web網站經常會遇到的一個問題就是: 如何通過瀏覽器上傳文件到web伺服器。通常從瀏覽者那裡獲取文件的方法,如
通過ftp、E-mail方式等,都比較繁瑣,特別是對於網站管理者來說,這些方式都需要一定程度的人工干預,否則就不能把結果
實時地顯示在網頁上。
Microsoft Posting Acceptor是微軟公司發佈的一個免費伺服器組件,使用它可以很簡單地實現瀏覽器通過調用網頁向伺服器端上
傳文件(如果再結合資料庫技術編寫相應的asp代碼,就能使上傳結果自動顯示在網頁上)。下面就結合筆者的實踐經驗對這一
方案作一簡要介紹。
本方案的軟體配置如下:客戶機操作系統為 Windows98;伺服器操作系統為Windows NT Server;Web伺服器為IIS4.0。為使IIS能
夠接收上傳的文件,還必須安裝Microsoft Posting Acceptor組件,該組件位於NT 4.0 Option Pack的Site Server Express中。Microsoft 
Posting Acceptor組件的ISAPI擴展函數CPSHOST.DLL直接處理文件上傳,目的URL被映射、解析為伺服器上的物理磁牒位置。具
體應用見如下網頁代碼: 
Upload.asp:
<% Response.Buffer = TRUE %>
<% if (Len(Request.ServerVariables("LOGON_USER")) = 0 ) then %>
<% Response.Status = "401 Unauthorized" %>
<HTML><BODY><B>錯誤: 拒絕訪問.</B><P></BODY></HTML>
<% else %>
<html>
<head>
<title>上傳文件</title>
</head>
<body> 
<h1 align="center">上傳文件</h1>
<form enctype="multipart/form-data" action="http://<%= Request.ServerVariables("SERVER_NAME") %>/TestDir/cpshost.dll?PUBLISH" 
method="post">
請選擇要上傳的文件: <input name="my_file" type="file"><br>
請選擇要上傳的文件: <input name="my_file" type="file"><br>
請選擇要上傳的文件: <input name="my_file" type="file"><br>
<input name="TargetURL" type="hidden" value="
http://<%=Request.ServerVariables("SERVER_NAME")%>/TestDir/
<%=Request.ServerVariables("LOGON_USER") %>"<br>
<input type="submit" name=" submit " value="上 傳">
</form>
</body>
</html>
<% end if %>
上述代碼以ASP文件的形式存放在Web網站宿主目錄下TestDir目錄中,用戶只需用瀏覽器請求該檔案即可。
需要注意的幾點是: 
1.Request.ServerVariables("LOGON_USER")返回登錄到Windows NT域的用戶名,在本例中,如果用戶名為空,則顯示拒絕訪問頁
面; 不為空,才顯示正常上傳頁面。
2.在安裝Microsoft Posting Acceptor組件後,CPSHOST.DLL文件位於Web伺服器宿主目錄下scripts目錄中,可以把該檔案拷貝到自
己的目錄中(如本例的TestDir目錄)使用。
3.在表單中,enctype="multipart/form-data" 這一項不能少,否則不能正常上傳。
4.表單控件TargetURL的名稱(name屬性)不能變。type="hidden"使該控件在頁面中不顯示。value屬性確定上傳文件在伺服器中存
放的路徑,可以根據實際情況調整。在本例中,文件上傳路徑是TestDir目錄(也就是本ASP文件和CPSHOST.DLL文件存放目錄)
下與登錄用戶名同名的子目錄,並且該目錄權限設為可寫。
5.my_file控件類型為「file」,在瀏覽器中顯示的是一個文本框後帶一個「瀏覽」按鈕。當用戶單擊「瀏覽」按鈕時,將彈出一
個標準的選擇文件對話視窗,供用戶選擇要上傳的文件。可以根據實際需要增減my_file控件的個數。
6.附屬於Windows 2000 Server及Windows 2000 Professional的IIS 5.0並沒有提供Site Server Express。如果您想在Windows 2000下使用
文件上傳功能,必須先在Windows NT Server 4.0下安裝Site Server Express,然後再從Windows NT Server 4.0昇級到Windows 2000 
Server。目前Windows 95/98、Windows NT Workstation、Windows 2000 Professional 都無法使用Site Server Express 所提供的功能。
[ZWYZ01]