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