有沒有辦法在客戶端瀏覽器上驗證從JSP頁面上傳的文件的大小是否超過了設置的大小限制,而不會強制用戶上傳整個文件只是爲了發現它太大?如何在不傳輸整個文件的情況下限制使用JavaScript(或Java)上傳文件的大小?
我想遠離任何專有的控制或技術,如Flash或ActiveX如果可能的話。
謝謝!
有沒有辦法在客戶端瀏覽器上驗證從JSP頁面上傳的文件的大小是否超過了設置的大小限制,而不會強制用戶上傳整個文件只是爲了發現它太大?如何在不傳輸整個文件的情況下限制使用JavaScript(或Java)上傳文件的大小?
我想遠離任何專有的控制或技術,如Flash或ActiveX如果可能的話。
謝謝!
這不是一個完美的解決方案,但如果你用request.getHeader("Content-Length")
檢查內容長度HTTP標頭,那麼你可以選擇不傳輸整個文件。
作爲解釋,一個非常大的文件不會一次全部傳輸。您必須實際打開代表該數據塊的POST數據流,並從中讀取整個事件才能傳輸。
在另一方面,如果你擔心的拒絕服務攻擊,那麼你就不能真正信任的Content-Length頭,因爲它很容易被僞造。在這種情況下,您應該設置限制並傳輸此文件,並在您超過此限制時立即停止。
建議你重新考慮閃光的決定,並採取看看YUI上傳,在這裏:
http://developer.yahoo.com/yui/uploader/
除其他事項外,fileSelect事件會立即告訴你所選文件的字節大小選擇之後但尚未上傳之前,您可以相應地進行限制。
使用JSP或PHP,您將無法限制文件大小,因爲在上載發生之前,您的頁面不會收到請求。此時您可以決定不保存文件,但可能爲時已晚。
這裏有一些Java解決方案,例如, MyUploader或Hermes。有些甚至支持多個文件上傳並恢復部分上傳,有些還會爲您提供源代碼。你也可以編寫你自己的,但它需要是一個簽名的applet才能運行,因爲它需要訪問本地文件系統。如果您使用的是Apache作爲您的網絡服務器,則需要足夠的內存來適應整個文件大小,以便在給定時間內上傳所有文件的內存。