深入研究“用ASP上載文件”(一)
發(fā)表時(shí)間:2024-02-18 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]現(xiàn)在“瘦客戶(hù)”的觀點(diǎn)已經(jīng)是一個(gè)神話了,但隨著電視或掌上型瀏覽器的繁榮,這一狀況會(huì)有所改變。今天絕大多數(shù)的網(wǎng)絡(luò)客戶(hù)仍使用功能強(qiáng)大的PC,附著著大量的客戶(hù)端存儲(chǔ)器和客戶(hù)端感興趣的內(nèi)容。在Internet協(xié)議下,將文件傳遞到中央服務(wù)器有一些方法可供選擇,但基于WEB的文件上載比其它方法都要高級(jí)。下面來(lái)檢...
現(xiàn)在“瘦客戶(hù)”的觀點(diǎn)已經(jīng)是一個(gè)神話了,但隨著電視或掌上型瀏覽器的繁榮,這一狀況會(huì)有所改變。今天絕大多數(shù)的網(wǎng)絡(luò)客戶(hù)仍使用功能強(qiáng)大的PC,附著著大量的客戶(hù)端存儲(chǔ)器和客戶(hù)端感興趣的內(nèi)容。在Internet協(xié)議下,將文件傳遞到中央服務(wù)器有一些方法可供選擇,但基于WEB的文件上載比其它方法都要高級(jí)。下面來(lái)檢驗(yàn)這一點(diǎn)。
一、HTTP與FTP的方式比較
為什么要上載?
文件上載對(duì)任何網(wǎng)絡(luò)應(yīng)用程序來(lái)說(shuō)都起到重要作用。這里有一些例子,是關(guān)于我們的一些客戶(hù)如何把文件上載并他們的WEB應(yīng)用程序結(jié)合起來(lái)的:
1、基于WEB的e-mail形式,用文件上載給郵件信息增加附件
2、外部互聯(lián)網(wǎng)應(yīng)用程序用文件上載在伙伴間傳送文件,如協(xié)議證明、軟件更新或文件
3、技術(shù)支持站點(diǎn)用文件上載從用戶(hù)中接收錯(cuò)誤記錄和有問(wèn)題文件
4、企業(yè)內(nèi)部互聯(lián)網(wǎng)的文獻(xiàn)出版用友好的網(wǎng)絡(luò)接口在用戶(hù)間分享文件
5、圖形庫(kù)用文件上載控制提交、產(chǎn)生略圖
6、ISP主機(jī)店面用文件上載發(fā)送產(chǎn)品圖象
HTTP與FTP的方式比較
在TCP/IP的早期,F(xiàn)TP是向服務(wù)器傳輸文件的標(biāo)準(zhǔn)機(jī)制。它可靠、可接受文本和二進(jìn)制格式,客戶(hù)可以在任何地方執(zhí)行,但是它遠(yuǎn)遠(yuǎn)不及HTTP的適應(yīng)性強(qiáng)。下面來(lái)比較一下:
■ 可靠性:用FTP上載,要么管理大量的用戶(hù)帳號(hào),要么就允許匿名訪問(wèn)。用WEB應(yīng)用程序上載,應(yīng)用程序可以確定允許誰(shuí)上載,免除了極大的管理負(fù)擔(dān)。
■ 安全性:通過(guò)HTTP上載可用SSL編碼,這樣一來(lái)信息可以在傳輸過(guò)程中加密。用FTP就無(wú)法作到。
■ 配置難易:FTP上載要求管理員精確地調(diào)節(jié)NTFS許可。用基于HTTP的上載和應(yīng)用程序,管理員和應(yīng)用程序都可以決定,如果需要的話。
■ 適應(yīng)性:你想在一個(gè)地方存儲(chǔ)DOC文件,在另一處存儲(chǔ)圖形嗎?使用FTP的話,用戶(hù)必須知道這些存儲(chǔ)路徑。而在WEB應(yīng)用程序中,你可以自行控制,不用打擾用戶(hù)就可以進(jìn)行修改。
■ 能力:用WEB應(yīng)用程序,每次調(diào)用都可以動(dòng)態(tài)地控制上載文件的大小,甚至可以根據(jù)同一個(gè)表單中的信息改變大小。另外還可以沖掉符合一定標(biāo)準(zhǔn)的上載文件,如錯(cuò)誤的MIME類(lèi)型或文件類(lèi)型。
■ 界面的簡(jiǎn)易友好性:招人喜歡的網(wǎng)頁(yè)可以提供指導(dǎo)、建議、在線幫助,而基于批處理的FTP是不可能作到的。更重要的是發(fā)生錯(cuò)誤時(shí),WEB方式可以立刻向用戶(hù)提供反饋并作出糾正。
■ 防火墻支持:出于安全和知識(shí)產(chǎn)權(quán)方面的考慮,許多機(jī)構(gòu)不允許外部的FTP。通過(guò)簡(jiǎn)單的配置,大多數(shù)防火墻都支持HTTP。
■ 補(bǔ)充信息:一個(gè)HTTP上載(用RFC1867)還提供其它可用信息,例如用戶(hù)的原始文件名,這在內(nèi)部互聯(lián)網(wǎng)環(huán)境下特別有用。
■ 上載到一個(gè)數(shù)據(jù)庫(kù):利用服務(wù)器端組件,如SA-FileUp,允許上載到OLE DB數(shù)據(jù)庫(kù)。但用FTP,卻絕對(duì)做不到這點(diǎn)!
■ 性能:FTP和HTTP最終都是用TCP協(xié)議,這是決定傳輸性能的決定因素。
■ 可靠性及重新上載:FTP和HTTP 1.1都允許傳輸重新啟動(dòng)。不幸地是許多服務(wù)器包括IIS,現(xiàn)在都不能支持任意一種協(xié)議的重新上載功能。FTP的重新上載功能將在IIS5版本中實(shí)現(xiàn)。
總之,同WEB本身一樣,服務(wù)器的可編程性使HTTP上載比FTP具有極大的優(yōu)勢(shì)。
HTTP上載格式
通過(guò)HTTP上載有三種文件機(jī)制,它們是RFC1867、PUT和WebDAV。
HTTP上載方法1:RFC1867
HTML 3.2最終推出W3C之前的一段時(shí)期,RFC1867 (http://info.internet.isi.edu/in-notes/rfc/files/rfc1867.txt) 是IETF的建議標(biāo)準(zhǔn)。首先是Netscape在Navigator 2.0中運(yùn)行,跟著Microsoft 把它作為IE 3.02 (32-bit) 的附加和IE 3.03 (16-bit)的自帶內(nèi)容。它是一個(gè)非常簡(jiǎn)單但又很強(qiáng)大的概念:定義一個(gè)格式域的新類(lèi)型
< INPUT TYPE= "FILE" >
然后向表單中填加不同的編碼方案:
< FORM ACTION="formproc.asp" METHOD="POST" ENCTYPE="multipart/form-data" >
而不是用典型的:
< FORM ACTION="formproc.asp" METHOD= "POST" >
在傳輸大量數(shù)據(jù)時(shí),這種編碼方案比默認(rèn)的"application/x-url-encoded"格式編碼方案效率高。正如你也許知道的,URL可用的字符集是很有限的。任何超出范圍的字符集都要用'%nn'來(lái)代替,在這里nn是相應(yīng)的兩位十六進(jìn)制數(shù)。即使是最常用的空格字符也要用'%20'來(lái)代替。如果瀏覽器不得不用效率如此低的編碼方法對(duì)整個(gè)文件進(jìn)行編碼,那么上載文件的傳輸規(guī)模有可能比原始文件大2到3倍。而RFC1867用Multipart MIME編碼,就象通常在e-mail信息中所見(jiàn)到的,在傳輸大量數(shù)據(jù)時(shí)不用編碼,而只是在數(shù)據(jù)周?chē)袔讉(gè)簡(jiǎn)單有用的頭。
結(jié)果看起來(lái)就象一個(gè)規(guī)則的HTML POST表單,實(shí)現(xiàn)上,通過(guò)4 KB的表單格式,代表的數(shù)據(jù)可以是幾兆字節(jié)。RFC1867還提出了一些有待被瀏覽器提供者采納的建議,即TYPE="FILE"語(yǔ)句的一些屬性。其中包括:
ACCEPT(接受):接收文件之前允許網(wǎng)站限制將要上載的文件類(lèi)型。
SIZE(大。涸O(shè)置單個(gè)文件名文本框的大小或允許多個(gè)文件使用單個(gè)< INPUT > 語(yǔ)句。
MAXLENGTH(長(zhǎng)度最大值):在客戶(hù)端設(shè)置的上載文件的最大規(guī)模。
通配符和上載路徑:雖然RFC有此建議,但I(xiàn)E和 Navigator都不支持通配符和路徑上載。
好在兩種瀏覽器都支持"Browse..."按鈕,用戶(hù)可以用"Open File..."對(duì)話框很容易地選出即將上載的文件。
VALUE子句的使用很有趣。為了用戶(hù)方便,可以讓W(xué)EB預(yù)先設(shè)置表單域的值。但是在這種情況下,它使一些不良網(wǎng)站可以預(yù)設(shè)上載文件名,加上一個(gè)客戶(hù)端提交的表單,就可不經(jīng)用戶(hù)許可而從他們的PC上盜竊文件。1997年夏天,CERT和Bell實(shí)驗(yàn)室的一名雇員一起對(duì)此發(fā)出了安全警告,Netscape和 Microsoft很快就發(fā)行了防止預(yù)設(shè)上載文件的補(bǔ)丁程序。
最初的RFC1867明確規(guī)定:“在用戶(hù)沒(méi)有明確要求的情況下,代理不得向其傳送任何文件,這一點(diǎn)很重要!彼詾g覽器本可以只是簡(jiǎn)單地發(fā)出一個(gè)警告對(duì)話框,例如“你想向服務(wù)器傳送文件x, y, z嗎?”,而不用完全禁止預(yù)設(shè)文件名。但是,在IE4.01中出現(xiàn)了一個(gè)安全空洞,使網(wǎng)站可以饒過(guò)IE現(xiàn)有的安全機(jī)制。(見(jiàn)http://www.microsoft.com/windows/ie/security/paste.htm)
HTTP上載方法2:HTTP PUT
HTTP 1.1 介紹了一個(gè)新的HTTP動(dòng)詞:PUT。當(dāng)網(wǎng)絡(luò)服務(wù)器收到了一個(gè)HTTP PUT 且對(duì)象名為("/myweb/image/x.gif"), 它要鑒別用戶(hù),取HTTP流的內(nèi)容并直接存儲(chǔ) 到網(wǎng)絡(luò)服務(wù)器。這種方法會(huì)給網(wǎng)絡(luò)帶來(lái)很大的破壞,因此不常使用。而且它將HTTP 最大的優(yōu)勢(shì)---服務(wù)器可編程性放棄了。在使用PUT的情況下,由WEB服務(wù)器自身處理請(qǐng)求,沒(méi)有CGI或ASP應(yīng)用程序介入的空間。應(yīng)用程序捕捉PUT的唯一方法是在低水平、ISAPI水平上操作。由于各種原因,大多數(shù)網(wǎng)絡(luò)開(kāi)發(fā)人員對(duì)此沒(méi)有興趣。
HTTP上載方法3:WebDAV
WebDAV (http://www.ietf.org/html.charters/webdav-charter.html) 允許網(wǎng)絡(luò)內(nèi)容的分布式授權(quán)和發(fā)布。它引入幾個(gè)動(dòng)詞,可以對(duì)HTTP內(nèi)容上載、鎖定/開(kāi)鎖、進(jìn)入/退出。我們可以把它看作一個(gè)非特有的配置管理(如來(lái)源安全)外加網(wǎng)絡(luò)文件傳輸。Microsoft已經(jīng)公開(kāi)宣布IIS5、Office 2000 及未來(lái)IE版本都將支持它。ISP們很愿意把它來(lái)取代那些低級(jí)、易出故障的FrontPage服務(wù)器附加部分的機(jī)制。要注意的是它并不是取代FrontPage服務(wù)器附加部分,它只是簡(jiǎn)單地提供低級(jí)標(biāo)準(zhǔn)服務(wù)來(lái)支持服務(wù)器附加部分正在進(jìn)行的更復(fù)雜的功能。在98年10月的PDC,你能看到Office 2000通過(guò)WebDAV完成了“保存到網(wǎng)絡(luò)”("Save to web" )這樣漂亮的任務(wù)。
聽(tīng)起來(lái)很棒,是不是?如果你想上載內(nèi)容,WebDAV是很好的,它可以解決許多問(wèn)題。但如果你想在網(wǎng)絡(luò)應(yīng)用程序內(nèi)上載文件,WebDAV就無(wú)能為力了。同HTTP PUT一樣, WebDAV這個(gè)動(dòng)詞是由服務(wù)器而不是應(yīng)用程序來(lái)解釋的,需要在ISAPI過(guò)濾器水平上使用WebDAV動(dòng)作,并在應(yīng)用程序中解釋內(nèi)容。
HTTP上載機(jī)制:總結(jié)
在WEB應(yīng)用程序上載文件時(shí),RFC1867仍然是最靈活的方法。PUT的用途很有限,WebDAV對(duì)內(nèi)容作者,如FrontPage的用戶(hù)來(lái)說(shuō)很好,但是,它對(duì)于那些想往WEB應(yīng)用程序上增加文件上載的網(wǎng)絡(luò)開(kāi)發(fā)人員來(lái)說(shuō),它能做的很少。
(出處:熱點(diǎn)網(wǎng)絡(luò))