我們建設(shè)web網(wǎng)站經(jīng)常會遇到的一個問題就是:如何實現(xiàn)通過瀏覽器上傳文件到web服務(wù)器。通常從瀏覽者那里獲取文件的方法,如通過ftp、email方式等,都比較繁瑣,特別是對于網(wǎng)站管理者來說,這些方式都需要一定程度的人工干預(yù),否則就不能把結(jié)果實時地顯示在網(wǎng)頁上。microsoft posting acceptor(簡稱mpa)是微軟公司發(fā)布的一個免費服務(wù)器組件,使用它可以容易地實現(xiàn)瀏覽器通過調(diào)用網(wǎng)頁向服務(wù)器端上傳文件,如果再編寫相應(yīng)的asp代碼,就能使上傳結(jié)果自動顯示在網(wǎng)頁上,從而實現(xiàn)諸如美術(shù)、攝影作品的征集展示,軟件、程
序的動態(tài)發(fā)布以及通過網(wǎng)頁發(fā)郵件中的附件上載等功能。你甚至可以為用戶提供宿主服務(wù),讓他們在你的服務(wù)器上發(fā)布自己的主頁,就像現(xiàn)在因特網(wǎng)上提供的免費個人主頁空間那樣。開發(fā)者只須編寫一次asp代碼,以后的所有工作都將自動進行。
安裝運行mpa
1.環(huán)境:要安裝mpa,首先應(yīng)確保你的web服務(wù)器滿足運行asp程序的條件。這方面的文章很多,這里就不重復(fù)了。例如可配置為:windowsnt4.0+optionpack4。
2.軟件:可在以下網(wǎng)址下載mpa:
http://www.microsoft.com/msdownload/postacc.htm,應(yīng)該是一個2mb多的exe文件。
3.安裝:在web服務(wù)器上運行下載的文件,運行后在web發(fā)布目錄的上級目錄(一般是c:inetpubscript目錄)中找到cpshost.dll文件,表明mpa已安裝。安裝后還生成一些技術(shù)文檔,有html格式的,也有pdf格式的,里面有對mpa很詳細的說明。
4.設(shè)置:把cpshost.dll文件所在目錄設(shè)為web發(fā)布虛擬目錄,并把訪問權(quán)限設(shè)為“可執(zhí)行”,把url“http://(服務(wù)器網(wǎng)址)/users”對應(yīng)的目錄權(quán)限設(shè)為上傳者可“寫入”。
5.運行:在瀏覽器中調(diào)用該目錄下的upload.asp頁,即可實現(xiàn)通過網(wǎng)頁的文件上傳。
使用mpa的幾點體會
編輯推薦閱讀
●用ASP編寫計數(shù)器
●專題:網(wǎng)站整體設(shè)計技巧
1.瀏覽器支持:mpa支持多種瀏覽器,cpshost.dll文件所在目錄中的upload.asp頁實際上是個瀏覽器類型判斷頁,它根據(jù)服務(wù)器端的browser.ini文件提供的參數(shù)判斷瀏覽器類型并轉(zhuǎn)到相應(yīng)頁:uploadx.asp(支持activex的瀏覽器:如ie4以上)或uploadn.asp(不支持activex的瀏覽器),uploadn.asp也可用于支持activex的瀏覽器。
2.上傳目錄:web管理者或用戶可根據(jù)需要在uploadn.asp或uploadx.asp頁中指定上傳文件的目標(biāo)目錄,此目標(biāo)目錄可與web服務(wù)器在不同的物理服務(wù)器上,但上傳者對此目錄一定要有“寫入”的權(quán)限。缺省狀態(tài)下,用mpa上傳文件時會問用戶名和口令,上傳的文件會放到“http://(服務(wù)器網(wǎng)址)/users/(nt域名)/(用戶名)”對應(yīng)的目錄下。子目錄“(nt域名)/(用戶名)”是自動創(chuàng)建的。另外,最好不要給上傳目錄的虛擬web目錄以“可執(zhí)行”的權(quán)限。
 圖1 uploadn.asp頁
3.上傳文件個數(shù):一次可上傳多個文件。如果經(jīng)常要大批量上傳文件,用uploadx.asp頁會比較方便———只選一次即可,而用uploadn.asp則每個文件都要選一次。
 圖2 uploadx.asp頁
4.附加信息:直接調(diào)用uploadn.asp,可在此頁的表單中增加字段來附加文字資料,在repost.asp頁中接收這些信息。上傳文件的文件名、大小、存放路徑等信息也可在此頁中自動取得,聰明的讀者一定會想到,要把上傳文件的相關(guān)信息存入數(shù)據(jù)庫,在此頁添加代碼即可。
存在的問題及解決辦法
1.文件改名:直接用mpa上傳的文件,只能以原文件名保存到目標(biāo)目錄,當(dāng)上傳文件與目標(biāo)目錄中已有文件重名時,只能簡單覆蓋。雖然不同用戶間由于用戶名不同,所以目標(biāo)目錄不同,不會覆蓋,但不能保證同一用戶自己不覆蓋自己的。在iis4中這個問題可以通過filesystemobject(文件系統(tǒng)對象)解決:先把文件上傳到一臨時目錄中,取得文件名,調(diào)用filesystemobject來判斷目標(biāo)目錄中有無重名文件,再根據(jù)情況用filesystemobject實現(xiàn)文件的改名、復(fù)制、刪除等操作。
2.對上傳加以限制:據(jù)微軟公司自己稱,當(dāng)上傳特大文件時,會使服務(wù)器的cpu百分之百被占用,從而停止響應(yīng)。雖然我們一般不會遇到這種問題,但對上傳加以限制,防患于未然還是很有必要的。在注冊表的hklmsoftwaremicrosoftwebpostcceptorsshost下有兩個鍵值:
maximumopentransactions(最大并發(fā)事務(wù)的個數(shù),缺省值200個)
opentransactionstimeout(事務(wù)處理時間溢出,缺省值600秒)
可修改其值對上傳加以限制。
3.對附加信息的限制:雖然通過修改uploadn.asp和repost.asp頁使我們在文件上傳的同時可以附加一些信息,但包括file、targeturl等表單字段在內(nèi),所有同上傳文件一起發(fā)送的表單字段都受如下限制:每個字段不能超過255字節(jié);字段中不能包含半角逗號,否則其后的內(nèi)容會丟失;字段中不能包含半角空格,半角空格在上傳后會丟失。如果一定要傳半角逗號和半角空格,可用其它不常用的符號代替,上傳后再用replace替換過來,也可讓文件和文字分開傳。
4.session的保存:上傳過程會使asp的session對象中的數(shù)據(jù)全部丟失。要保存session中的數(shù)據(jù),可在uploadn.asp頁的表單中添加一隱藏的表單字段來存放session中的數(shù)據(jù)。
5.實現(xiàn)匿名上傳:可能是出于安全方面的考慮,缺省狀態(tài)下,mpa不支持匿名上傳,即使刪掉asp頁頭幾行的口令驗證代碼也沒用。但我們可通過修改注冊表達到這一目的:
去掉asp頁中驗證用戶名的代碼;
運行regedit.exe(95/98)或regedt32.exe(nt);
找到hkey_local_machinesoftwaremicrosoftwebpostcceptorsshost;
增加鍵值:名稱:allowanonymous,類型:reg_dword,值:1;
重啟服務(wù)器。
但這一方法對6.0.86.0版的cpshost.dll無效。(責(zé)任編輯Ray)
|