top
Loading...
如何在Web頁面中集成文件上傳功能


當前,個人主頁制作非常流行。當用戶開發好自己的頁面時,需要將文件傳輸到服務器上,解決這個問題的方法之一
是運行FTP服務器并將每個用戶的FTP默認目錄設為用戶的Web主目錄,這樣用戶就能運行FTP客戶程序并上傳文件到指定的
Web目錄。由于Windows NT 和 Windows98均不提供直接的基于窗口形式的FTP客戶程序,用戶必須懂得如何使用基于命令行
的FTP客戶,或掌握一種新的基于窗口形式的FTP客戶程序。因此,這種解決方案僅對熟悉FTP且富有經驗的用戶來說是可行
的。 如果我們能把文件上傳功能與Web集成,使用戶僅用Web瀏覽器就能完成上傳任務,這對于他們來說將是非常方便的。
下面就結合筆者的實踐經驗對這一方案作一簡要介紹。
本方案的軟件配置如下:客戶機操作系統為 Windows98 ; 服務器操作系統為Windows NT Server;Web服務器為
IIS4.0。為使IIS能夠接收上傳的文件, 還必須安裝Posting Acceptor組件,該組件位于NT 4.0 Option Pack 的 Site
Server Express中。Posting Acceptor組件的ISAPI擴展函數CPSHOST.DLL直接處理文件上傳,目的URL被映射、解析為服務
器上的物理磁盤位置。
具體應用見如下網頁代碼:

<% 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 method="post" enctype="multipart/form-data"
action="http://<%= Request.ServerVariables("SERVER_NAME") %>
/myweb/cpshost.dll?PUBLISH">
<input name="TargetURL" type="hidden" value="http://<%=
Request.ServerVariables("SERVER_NAME") %>/myweb/<%=
Request.ServerVariables("LOGON_USER") %>"
>
請選擇要上傳的文件: <input name="my_file" type="file"><br>
請選擇要上傳的文件: <input name="my_file" type="file"><br>
請選擇要上傳的文件: <input name="my_file" type="file"><br>
<br>
<input type="submit" name="cmdup" value="上 傳">
</form>
</body>
</html>
<% end if %>

上述代碼以ASP文件的形式存放在Web網站宿主目錄下myweb目錄中, 用戶只需用瀏覽器請求該文件即可。
需要注意的幾點是:
⒈Request.ServerVariables("LOGON_USER")返回登錄到Windows NT域的用戶名,在本例中,如果用戶名為空,則顯示
拒絕訪問頁面;不為空,才顯示正常上傳頁面。
⒉在安裝Posting Acceptor組件后,CPSHOST.DLL文件位于Web服務器宿主目錄下scripts目錄中,可以把該文件拷貝到
自己的目錄中使用。
⒊在表單中,enctype="multipart/form-data" 這一項不能少,否則不能正常上傳。
⒋表單控件TargetURL的名稱(name屬性)不能變。type="hidden"使該控件在頁面中不顯示。value屬性確定上傳文件在
服務器中存放的路徑, 可以根據實際情況調整。在本例中,文件上傳路徑是myweb目錄(也就是本ASP文件和CPSHOST.DLL文
件存放目錄)下與登錄用戶名同名的子目錄,并且該目錄權限設為可寫。
⒌my_file控件類型為"file",在瀏覽器中顯示的是一個文本框后帶一個"瀏覽"按鈕。當用戶單擊"瀏覽"按鈕時,將彈
出一個標準的選擇文件對話框,供用戶選擇要上傳的文件。可以根據實際需要增減my_file控件的個數。

北斗有巢氏 有巢氏北斗