2013-06-02 43 views
2

我正在使用FormPanel將文件上傳到服務器。我想要做的是在上傳文件之前確保文件大小小於給定大小(例如10MB)。 在服務器端,我有一個javax.servlet.http.HttpServlet,我重寫了doPost。這裏的HttpServletRequest參數具有文件的大小,但問題是我沒有達到doPost,直到文件已經上傳。因此,如果我選擇上傳1 GB文件,那麼在整個文件上傳後,客戶端收到的「文件太大」錯誤消息不會顯示30秒左右。使用GWT檢查上傳前的文件大小

在上傳之前,沒有辦法在客戶端檢查大小嗎?或者,如果數據大小超過特定大小,則讓servlet拋出異常。

+0

'POST'請求通常有一個關聯的'Content-Length'頭部,不是嗎? – fge

+0

是的,但問題是,我不能讀取該標題,直到我已達到服務器端的doPost,此時文件上載已完成。 –

回答

4

只需添加本地方法:

private native int getFileSize(final Element data) /*-{ 
      return data.files[0].size; 
     }-*/; 

然後調用它像這樣:

final FileUpload upload = new FileUpload(); 
// 
// some actions 
// 
final int size = getFileSize(upload.getElement()) 

對我來說工作得很好。

+0

工作完美,謝謝! –

3

有沒有辦法從服務器做到這一點,你必須在做上傳之前進行檢查。有several routes你可以採取任何你將在GWT SDK中找到。

因爲並非GWT支持的所有瀏覽器都實現了HTML5的File API,所以沒有本地GWT解決方案。但是,您可以試試這個庫,讓你的文件,支持HTML5文件API上傳控件:

https://code.google.com/p/lib-gwt-file/

+0

謝謝你的回覆。我想有沒有簡單的方法來做到這一點。也許我只會在上傳之前給出一個關於大小的警告,添加一個取消按鈕,並拒絕服務器端的超大文件。 –

相關問題