將文件上傳到服務器時,Web瀏覽器是否將http頭中的文件大小發送出去?如果是這種情況,那麼是否可以通過閱讀標題來拒絕文件,而不是等待整個上傳過程完成?上傳文件的大小
上傳文件的大小
回答
http://www.faqs.org/rfcs/rfc1867.html
HTTP客戶端 鼓勵提供內容長度的整體文件的輸入,這樣,如果所提出的文件數據太大,無法 處理合理
一個 繁忙的服務器可以檢測但內容長度不是必需的,所以你不能依賴它。另外,攻擊者可能僞造錯誤的內容長度。
閱讀文件內容是唯一可靠的方法。話雖如此,如果content-lenght存在並且太大,關閉連接將是一件合理的事情。
此外,內容以多部分形式發送,所以大多數現代框架都先解碼。這意味着在框架完成之前你不會得到文件字節流,這可能意味着「直到整個文件被上傳」。
我不知道,但你真的不應該信任標頭中發送任何東西,因爲它可以由用戶來僞造。
這取決於服務器的工作方式。例如在PHP中,你的腳本不會運行,直到文件上傳完成,所以這是不可能的。
編輯:之前太過分了,你可能想檢查這個依賴於Apache配置的其他答案:Using jQuery, Restricting File Size Before Uploading。以下說明僅在您需要更多自定義反饋時纔有用。
是的,您可以在允許上傳整個文件之前預先獲得一些信息。
這裏的頭從一種形式來與enctype="multipart/form-data"
屬性的例子:
POST/HTTP/1.1
Host: 127.0.0.1:8000
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9.0.3) Gecko/2008092414 Firefox/3.0.3
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.7,fr-be;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------886261531333586100294758961
Content-Length: 135361
-----------------------------886261531333586100294758961
Content-Disposition: form-data; name=""; filename="IMG_1132.jpg"
Content-Type: image/jpeg
(data starts here and ends with -----------------------------886261531333586100294758961)
你必須在頭中的內容長度,另外還有就是內容類型的文件部分的標題(每個文件都有自己的頭,這是多部分編碼的目的)。請注意,通過猜測文件類型來設置相關的Content-Type是瀏覽器的責任;你不能保證它,但它應該是相當可靠的早期拒絕(但你最好檢查整個文件,當它是完全可用的)。
現在,有一個問題。我曾經像這樣過濾圖像文件,不是大小,而是內容類型;但是如果您想盡快停止請求,則會出現同樣的問題:瀏覽器在發送完整請求後纔會收到您的回覆,其中包括表單內容以及上傳文件。
如果你不想提供的內容並停止上傳,你別無選擇,只能粗暴地關閉套接字。用戶只會看到一個令人困惑的「由對等方重置連接」消息。這很糟糕,但它是有設計的。
所以你只想在後臺異步檢查的情況下使用這種方法(使用檢查文件字段的計時器)。所以我有這樣的黑客:
- 我使用jQuery來告訴我,如果該文件中的字段已經改變
- 當選擇一個新的文件,禁用相同的形式上的所有其他文件字段只得到一個。
- 將文件發送異步(jQuery的可以爲你做它,它使用一個隱藏幀)
- 服務器端,檢查頭(內容長度,內容類型,...),一旦切斷連接因爲你有你需要的東西。
- 設置一個會話變量,告訴該文件是否正確。
- 客戶端,因爲文件上傳到一個框架如果連接關閉甚至沒有任何反饋。你唯一的選擇是計時器。
- 客戶端,定時器輪詢服務器以獲取上傳文件的狀態。服務器端,你有該會話變量集,將其發送回瀏覽器。
- 客戶端有狀態碼;呈現給你的表單:錯誤信息,綠色複選標記/紅色X,無論如何。重置文件字段或禁用表單,您決定。不要忘記重新啓用其他文件字段。
很亂,呃?如果你們中的任何一個人有更好的選擇,我全都是耳朵。
- 1. 上傳文件大小inYii2
- 2. 上傳文件總大小
- 3. 上傳文件大小
- 4. PHP最大上傳文件大小
- 5. Plone + Ploneboard最大上傳文件大小
- 6. 最大文件上傳大小
- 7. 上傳的文件大小未知
- 8. php文件上傳'的大小
- 9. 獲取carrierwave上傳的文件大小
- 10. 特定的文件大小上傳
- 11. 文件上傳問題的大小
- 12. 文檔列表API文件上傳失敗時,文件大小比繼續上傳塊大小更大
- 13. 如何在htaccess中設置上傳文件大小來上傳大文件?
- 14. DWR文件上傳大小限制
- 15. jquery文件上傳大小檢查
- 16. 增加上傳文件大小cakephp 3
- 17. Cropper.JS上傳文件大小問題
- 18. PHP文件上傳大小限制
- 19. Asp.Net上傳前檢查文件大小
- 20. 如何檢查上傳文件大小
- 21. 春季上傳文件大小限制
- 22. 上傳文件大小超過500mb
- 23. 檢查文件大小上傳
- 24. Gerrit限制文件上傳大小
- 25. 上傳壓縮圖像文件大小?
- 26. 上傳文件大小和時間
- 27. 驗證上傳文件大小
- 28. 上傳文件大小檢查Grails
- 29. 媒體上傳文件大小
- 30. 在上傳前驗證文件大小