2013-09-27 28 views
1

我正在圍繞GWT中的文件上傳工作。我的測試應用工作正常。我想爲由gwtupload創建的不同上傳小部件設置不同的文件上傳限制。 (Project Homegwtupload:設置動態文件上傳大小

SingleUploader sUploader = new SingleUploader(); 

我使用以下代碼設定上傳限制在web.xml。是否有任何選項可以在運行時設置不同的文件大小?

<context-param> 
    <!-- max size of the upload request --> 
    <param-name>maxSize</param-name> 
    <param-value>3145728</param-value> 
    </context-param> 

回答

1

在gwtupload UploadServlet.java類有這個方法,你可以重寫傳遞之前請求上org.apache.commons.fileupload.servlet.ServletFileUpload都會調用:

public void checkRequest(HttpServletRequest request) { 
    logger.debug("UPLOAD-SERVLET (" + request.getSession().getId() + ") procesing a request with size: " + getContentLength(request) + " bytes."); 
    if (getContentLength(request) > maxSize) { 
     throw new UploadSizeLimitException(maxSize, getContentLength(request)); 
    } 
} 

如果您需要通過SingleUploader修改最大允許大小客戶端,您可以通過將maxsize傳入隱藏表單字段並在重寫的checkRequest方法中檢查它來完成此操作。然後會再次檢查web.xml中配置的大小,但apache庫是絕對最大大小。即你可以限制到一個數字/低於/低於,但不高於。

我最終因爲類似這樣的事情而放棄了gwtupload,並推出了自己的版本,使用apache文件上傳庫非常容易,而且更加靈活。

+0

一個受保護的變量,我從混帳https://github.com/manolo/gwtupload下載源文件和修改源位,但它讓我奇怪的問題。檢查出:http://stackoverflow.com/questions/19064038/the-import-gwtupload-cannot-be-resolved –

+0

剛剛檢查過,我很高興它爲你工作。請將答案標記爲已接受,以便我可以開始評論。 爲什麼不擴展UploadServlet並使用您的子類?也許我在這裏錯過了一些東西。 – tom

+0

@tom gwtupload servlet不被認爲是實際使用的fileupload庫的替代品,而是計算上傳進度,能夠取消正在進行的上傳,能夠向GAE發送文件等的補充。它非常靈活,正如你在回答中所說的那樣,你可以覆蓋幾乎所有的行爲來擴展它以改變諸如動態設置最大文件大小之類的行爲,但請注意,由於安全問題,max-size被設置爲固定的,否則任何人都可能發送惡意請求來增加servlet約束的大小並破壞您的帶寬或您的託管空間報價。 –

0

只是覆蓋下面。它的工作對我來說,最大範圍是超

@Override 
public void init() throws ServletException { 
    maxSize = 157286400; 
    super.init(); 
} 

@Override 
public void checkRequest(HttpServletRequest request) { 
    maxSize = 157286400; 
    super.checkRequest(request); 
}