當前位置:首頁 » 文件管理 » http上傳大文件上傳

http上傳大文件上傳

發布時間: 2023-11-24 11:25:59

① http文件上傳的原理是什麼請問向qq郵箱這類可以上傳文件的網頁,他們上傳文件的原理是不是,當用

有個誤區:
在上傳插件中,用戶點擊提交(確認)後,文件才開始上傳,這時候,會上傳到伺服器的某個目錄(不是臨時目錄,一般是伺服器按照管理用戶文件的規則所建立的文件夾),伺服器會返回一個指針,這個指針指向了你上傳的文件。當你發送郵件後,郵件中也會包含這個指針。不管你把這個文件放到哪個文件夾,實際上都只是存放的這個指針而已。如非管理需要,這個文件應該會永久保存,任何轉發,轉儲的行為,其實也只是操作的這個指針而不是文件本身。
即使你刪除文件,也只是在你的文件夾中刪除這個指針。所以,很多「極速秒傳」實際上是先判斷你要上傳的文件的MD5值是否已經在伺服器中存在,如果存在,就把已存在的文件的指針放上去,是不是很快?

② 如何使用java實現基於Http協議的大文件傳輸

雖然在JDK的java.net包中已經提供了訪問HTTP協議的基本功能,但是對於大部分應用程序來說,JDK庫本身提供的功能還不夠豐富和靈活。HttpClient是ApacheJakartaCommon下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協議的客戶端編程工具包,並且它支持HTTP協議最新的版本和建議。以下是簡單的post例子:Stringurl="bbslogin2.php";PostMethodpostMethod=newPostMethod(url);//填入各個表單域的值NameValuePair[]data={newNameValuePair("id","youUserName"),newNameValuePair("passwd","yourPwd")};//將表單的值放入postMethod中postMethod.setRequestBody(data);//執行postMethodintstatusCode=httpClient.executeMethod(postMethod);//HttpClient對於要求接受後繼服務的請求,象POST和PUT等不能自動處理轉發//301或者302if(statusCode==HttpStatus.SC_MOVED_PERMANENTLY||statusCode==HttpStatus.SC_MOVED_TEMPORARILY){//從頭中取出轉向的地址HeaderlocationHeader=postMethod.getResponseHeader("location");Stringlocation=null;if(locationHeader!=null){location=locationHeader.getValue();System.out.println("Thepagewasredirectedto:"+location);}else{System.err.println("Locationfieldvalueisnull.");}return;}詳情見:/developerworks/cn/opensource/os-httpclient/

③ 上傳的大文件

基於WEB的文件上傳可以使用FTP和HTTP兩種協議,用FTP的話雖然傳輸穩定,但安全性是個嚴重的問題,而且FTP伺服器讀用戶庫獲取許可權,這樣對於用戶使用來說還是不太方便。 剩下只有HTTP。在HTTP中有3種方式,PUT、WEBDAV、RFC1867,前2種方法不適合大文件上傳,基本上我們使用的web上傳都是基於RFC1867標準的HTML中基於表單的文件上傳。
RFC1867:
1.HTML表單
現有的HTML規范為INPUT元素的TYPE屬性定義了八種可能的值,分別是:CHECKBOX, HIDDEN,MAGE,PASSWORD,RADIO,RESET,SUBMIT,TEXT。 另外,當表單採用POST方式的時候,表單默認的具有「application/x-www-form-urlencoded」的ENCTYPE屬性。
RFC1867標准對HTML做出了兩處修改:
(1)為INPUT元素的TYPE屬性增加了一個FILE選項。
(2)INPUT標記可以具有ACCEPT屬性,該屬性能夠指定可被上傳的文件類型或文件格式列表。
另外,本標准還定義了一種新的MIME類型:multipart/form-data,以及當處理一個帶有ENCTYPE=multipart/form-data 並且/或含有<INPUT type=file>的標記的表單時所應該採取的行為。
舉例來說,當HTML表單作者想讓用戶能夠上傳一個或更多的文件時,他可以這么寫:
<FORM ENCTYPE=multipart/form-data ACTION=_URL_ METHOD=POST>
File to process:
<INPUT NAME=userfile1 TYPE=file>
<INPUT TYPE=submit VALUE=Send File>
</FORM>
HTML DTD里所需要做出的改動是為InputType實體增加一個選項。此外,我們也建議用一系列用逗號分隔的文件類型來作為INPUT標記的ACCEPT屬性。
... (其他元素) ...
<!ENTITY % InputType (TEXT | PASSWORD | CHECKBOX |
RADIO | SUBMIT | RESET |
IMAGE | HIDDEN | FILE )>
<!ELEMENT INPUT - 0 EMPTY>
<!ATTLIST INPUT
TYPE %InputType TEXT
NAME CDATA #IMPLIED -- required for all but submit and reset
VALUE CDATA #IMPLIED
SRC %URI #IMPLIED -- for image inputs --
CHECKED (CHECKED) #IMPLIED
SIZE CDATA #IMPLIED --like NUMBERS,
but delimited with comma, not space
MAXLENGTH NUMBER #IMPLIED
ALIGN (top|middle|bottom) #IMPLIED
ACCEPT CDATA #IMPLIED --list of content types
>
... (其他元素) ...
2.文件傳輸延遲
在某些情況下,在確實准備接受數據前,伺服器先對表單數據中的某些元素(比如說用戶名,賬號等)進行驗證是推薦的做法。但是,經過一定的考慮後,我們認為如果伺服器想這樣做的話,最好是採用一系列的表單,並將前面所驗證過的數據元素作為「隱藏」欄位傳回給客戶端,或者是通過安排表單使那些需要驗證的元素先顯示出來。這樣的話,那些需要做復雜的應用的伺服器可以自己維持事務處理的狀態,而那些簡單的應用的則可以實現得簡單些。
HTTP協議可能需要知道整個事務處理中的內容總長度。即使沒有明確要求,HTTP客戶端也應該提供上傳的所有文件的內容總長度,這樣一個繁忙的伺服器就能夠判斷文件的內容是否是過大以至於將不能完整地處理,從而返回一個錯誤代碼並關閉該連接,而不用等到接受了所有的數據才進行判斷。一些現有的CGI應用對所有的POST事務都需要知道內容總長度。
如果INPUT標記含有一個MAXLENGTH屬性,客戶端可以將這個屬性值看作是伺服器端所能夠接受的傳送文件的最大位元組數。在這種情況下,伺服器能夠在上傳開始前,提示客戶端在伺服器上有多少空間可以用來進行文件上傳。但是應該引起注意的是,這僅僅是一個提示,在表單被創建後和文件上傳前,伺服器的實際需求可能會發生改變。
在任何情況下,如果接受的文件過大的話,任何一個HTTP伺服器都有可能在文件傳輸的過程中中斷傳輸。
3.傳輸二進制數據的其他解決辦法
有些人曾經建議使用一種新的MIME類型aggregate,比如說aggregate/mixed 或是content-transfer-encoding 包來描述那些不確定長度的二進制數據,而不是靠分解為多個部分來表示。雖然我們並不反對這么做,但這需要增加額外的設計和標准化工作來讓大家接受並理解aggregate。 從另一方面來說,分解為多部分的機制工作得很好,能夠非常簡單的在客戶發送端和伺服器接受端加以實現,而且能像其他一些綜合處理二進制數據的方式一樣高效率地工作。
RFC上傳
1.一次性得到上傳的數據,然後分析處理。
看了N多代碼之後發現,無組件程序和一些COM組件都是使用Request.BinaryRead方法。一次性得到上傳的數據,然後分析處理。這就是為什麼上傳大文件很慢的原因了,IIS超時不說,就算幾百M文件上去了,分析處理也得一陣子。
2.一邊接收文件,一邊寫硬碟。
了解了一下國外的商業組件,比較流行的有Power-Web,AspUpload,ActiveFile,ABCUpload,aspSmartUpload,SA-FileUp。其中比較優秀的是ASPUPLOAD和SA-FILE,他們號稱可以處理2G的文件(SA-FILE EE版甚至沒有文件大小的限制),而且效率也是非常棒,難道編程語言的效率差這么多?查了一些資料,覺得他們都是直接操作文件流。這樣就不受文件大小的制約。但老外的東西也不是絕對完美,ASPUPLOAD處理大文件後,內存佔用情況驚人。1G左右都是稀鬆平常。至於SA-FILE雖然是好東西但是破解難尋。然後發現2款.NET上傳組件,Lion.Web.UpLoadMole和AspnetUpload也是操作文件流。但是上傳速度和CPU佔用率都不如老外的商業組件。
做了個測試,LAN內傳1G的文件。ASPUPLOAD上傳速度平均是4.4M/s,CPU佔用10-15,內存佔用700M。SA-FILE也差不多這樣。而AspnetUpload最快也只有1.5M/s,平均是700K/s,CPU佔用15-39,測試環境: PIII800,256M內存,100M LAN。我想AspnetUpload速度慢是可能因為一邊接收文件,一邊寫硬碟。資源佔用低的代價就是降低傳輸速度。但也不得不佩服老外的程序,CPU佔用如此之低.....。
上傳問題
我們在上傳大文件時都遇到過這樣或那樣的問題。設置很大的maxRequestLength值並不能完全解決問題,因為會block直到把整個文件載入內存後,再加以處理。實際上,如果文件很大的話,我們經常會見到Internet Explorer顯示 The page cannot be displayed - Cannot find server or DNS Error,好像是怎麼也catch不了這個錯。為什麼?因為這是個client side錯誤,server side端的Application_Error是處理不到的。
解決的方法是利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody 和 ReadEntityBody方法從IIS為建立的pipe里分塊讀取數據。Chris Hynes為我們提供了這樣的一個方案(用HttpMole),該方案除了允許你上傳大文件外,還能實時顯示上傳進度。
Lion.Web.UpLoadMole和AspnetUpload 兩個.NET組件都是利用的這個方案。
方案原理:
利用HttpHandler實現了類似於ISAPI Extention的功能,處理請求(Request)的信息和發送響應(Response)。
方案要點:
1. httpHandler or HttpMole
a.分塊讀取和寫入數據
b.實時跟蹤上傳進度更新meta信息
2. 利用隱含的HttpWorkerRequest用它的GetPreloadedEntityBody 和 ReadEntityBody方法處理文件流
3. 自定義Multipart MIME 解析器。
自動截獲MIME分割符。
將文件分塊寫如臨時文件。
實時更新Appliaction 狀態(ReceivingData, Error, Complete) 。

④ 用瀏覽器上傳文件顯示http請求錯誤是怎麼回事

上傳文件顯示http請求錯誤的原因:

1、網路問題,可能當前的網路不好,可以嘗試重新上傳;或者檢查一下路由器。

2、瀏覽器的問題,可以嘗試換個瀏覽器。

3、防火牆,有可能被設置到了吧。

4、網頁問題,可能停留時間太長導致和後端的服務改帆滾器斷開連接,刷新一下。

5、文檔的格式問題。

此錯誤表明傳輸給伺服器的證書與登錄伺服器所需的證書不匹配。

請與 Web 伺服器的管理員聯系,以確認您是否具有訪問所請求資源核余的許可權。 401.2 未授權:伺服器的配置導致登錄失敗。

此錯誤表明傳輸給伺服器的證書與登錄伺服器所需的證書不匹配。此錯誤通常由未發送正確的 WWW 驗證表頭欄位所致。

請與 Web 服務轎羨器的管理員聯系,以確認您是否具有訪問所請求資源的許可權。 401.3 未授權:由於資源中的 ACL 而未授權。

此錯誤表明客戶所傳輸的證書沒有對伺服器中特定資源的訪問許可權。此資源可能是客戶機中的地址行所列出的網頁或文件,也可能是處理客戶機中的地址行所列出的文件所需伺服器上的其他文件。

請記錄試圖訪問的完整地址,並與 Web 伺服器的管理員聯系以確認您是否具有訪問所請求資源的許可權。

錯誤解釋:

此錯誤表明 Web 伺服器已經安裝了篩選程序,用以驗證連接到伺服器的用戶。此篩選程序拒絕連接到此伺服器的真品證書的訪問。 請記錄試圖訪問的完整地址,並與 Web 伺服器的管理員聯系以確認您是否具有訪問所請求資源。

⑤ http文件上傳的原理

HTTP 協議定義伺服器端和客戶端之間文件傳輸的溝通方式。目前HTTP協議的版本是Http1.1。RFC 2616描述了HTTP協議的具體信息。

這個協議已經成為瀏覽器和Web站點之間的標准。

當我上網的時候底層是如何進行交互的?

當訪問者點擊一個超鏈接的時候,將會給瀏覽器提交一個URL地址。通過這個URL地址,瀏覽器便知道去鏈接那個網站並去取得具體的頁面文件(也可能是一張圖片,一個pdf文件)。

HTTP工作的基礎就是,連接一個伺服器並開始傳輸文件到瀏覽器。

HTTP傳輸的基本過程

在http傳輸的過程中,被稱為客戶端的請求者向伺服器請求一個文件。

最基本的過程是:
1 客戶端連接一個主機;
2 伺服器接收連接,
3 客戶端請求一個文件,
4 伺服器發送一個應答.

⑥ http能傳輸500g的文件嗎

可以。早期互聯⽹上傳輸的基本上都是只有⼏ K ⼤⼩的⽂本和⼩圖⽚,現在的情況則⼤有不同。⽹頁⾥包含的信息實在是太多了,隨隨便便⼀個主頁 HTML 就有可能上百 K,⾼質量的圖⽚都以 M 論,更不要說那些電影、電視劇了,⼏ G、⼏⼗ G 都有可能。
數據壓縮
瀏覽器在發送請求時都會帶著 Accept-Encoding 頭欄位,⾥⾯是瀏覽器⽀持的壓縮格式列表,例如 gzip、deflate、br 等,這樣伺服器就可以從中選擇⼀種壓縮演算法,放進 Content-Encoding 響應頭⾥,再把原數據壓縮後發給瀏覽器。如果壓縮率有 50%,那麼 100k 的數據壓完之後只剩 50k,相當於在帶寬不變的情況下⽹速快了⼀倍。
分塊傳輸
除了壓縮⽂件之外,另⼀種辦法就是分塊傳輸。它們的原理差不多,都是把⼤⽂件變⼩傳輸。分塊傳輸會把⼀個⼤⽂件切成很多⼩塊,把這些⼩塊依次發給瀏覽器,瀏覽器收到之後再組裝復原。這樣瀏覽器和伺服器都不⽤在內存中保存全部⽂件,每次只收發⼀⼩部分,⽹絡也不會被⼤⽂件長時間占⽤,內存、帶寬等資源也就節省下來了。

⑦ 怎麼用http上傳一個文件到伺服器 python

首先,標准HTTP協議對上傳文件等表單的定義在這里:wwwietforg/rfc/rfc1867txt 大概數據包格式如下:

單文件:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x
content-disposition: form-data; name="field1"

Joe Blow
--AaB03x
content-disposition: form-data; name="pics"; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--
多文件:

Content-type: multipart/form-data, boundary=AaB03x

--AaB03x
content-disposition: form-data; name="field1"

Joe Blow
--AaB03x
content-disposition: form-data; name="pics"
Content-type: multipart/mixed, boundary=BbC04y

--BbC04y
Content-disposition: attachment; filename="file1.txt"
其次,python上傳文件的幾種方法:

1 自己封裝HTTP的POST數據包:http//stackoverflowcom/questions/680305/using-multipartposthandler-to-post-form-data-with-python

import httplibimport mimetypesdef post_multipart(host, selector, fields, files): content_type, body = encode_multipart_formdata(fields, files) h = httplib.HTTP(host) h.putrequest('POST', selector) h.putheader('content-type', content_type) h.putheader('content-length', str(len(body))) h.endheaders() h.send(body) errcode, errmsg, headers = h.getreply() return h.file.read() def encode_multipart_formdata(fields, files): LIMIT = '----------lImIt_of_THE_fIle_eW_$' CRLF = '\r\n' L = [] for (key, value) in fields: L.append('--' + LIMIT) L.append('Content-Disposition: form-data; name="%s"' % key) L.append('') L.append(value) for (key, filename, value) in files:

熱點內容
安卓手機硬體怎麼升級 發布:2025-01-22 12:55:25 瀏覽:220
可編程脈沖電源 發布:2025-01-22 12:49:22 瀏覽:829
歐規墨規美規中東哪個配置高 發布:2025-01-22 12:48:00 瀏覽:777
安卓機怎麼用不了多久 發布:2025-01-22 12:47:44 瀏覽:761
安卓怎麼錄屏別人直播 發布:2025-01-22 12:35:20 瀏覽:385
1030怎麼配置電腦 發布:2025-01-22 12:35:19 瀏覽:89
sql資料庫的埠 發布:2025-01-22 12:20:02 瀏覽:362
安卓最終幻想8怎麼設置中文 發布:2025-01-22 12:19:23 瀏覽:651
怎麼查電腦配置和網路 發布:2025-01-22 12:19:16 瀏覽:586
linuxsnmp查看 發布:2025-01-22 12:17:49 瀏覽:37