2017-07-03 96 views
0

這是我上傳文件代碼:無法上傳大於10MB的文件?

@Override 
public Representation post(Representation entity) { 
    try { 
     if (entity != null) { 
      if (MediaType.MULTIPART_FORM_DATA.equals(entity.getMediaType(), true)) { 
       DiskFileItemFactory factory = new DiskFileItemFactory(); 
       factory.setSizeThreshold(100000000); 
       RestletFileUpload upload = new RestletFileUpload(factory); 
       FileItemIterator fileIterator = upload.getItemIterator(entity); 
       while (fileIterator.hasNext()) { 
        FileItemStream item = fileIterator.next(); 
        String name = item.getName(); 
        byte[] byteContent = ByteStreams.toByteArray(item.openStream()); 
        if(byteContent != null) { 
         String result = doSomethingWith(byteContent); 
         Representation response = new StringRepresentation(result); 
         response.setMediaType(MediaType.APPLICATION_JSON); 
         return response; 
        } 
       } 
      } else { 
       return badRequest(); 
      } 
     } else { 
      return badRequest(); 
     } 
    } catch (Exception e) { 
     return internalError(); 
    } 
    return null; 
} 

當部署在碼頭(Java 8)它的工作原理時,文件大小約爲較低然後10MB,小文件,如1-2 MB,當文件較大像10MB +上傳失敗,Restet或Jetty有什麼問題?

+0

我讀過關於添加:ContextHandler.setMaxFormContentSize(int maxSize);爲Jetty,但不知道如何將此配置與Reslet集成或即使它可以工作。 – xybrek

+0

處理上載的servlet的servlet規格多部分配置設置是什麼? –

+0

查看以前的答案:https://stackoverflow.com/q/19145489/775715 –

回答

0

在服務器實例上設置一個屬性來修改最大內容大小。 Jetty限制了阻止DOS攻擊的數據量。您可以通過配置更改表格上傳大小權限,如下所示。 Link to documentation

<configure class="org.eclipse.jetty.server.Server"> 
     <Call name="setAttribute"> 
     <Arg>org.eclipse.jetty.server.Request.maxFormContentSize</Arg> 
     <Arg>200000</Arg> 
    </Call> 
</configure> 
+0

這不能解決問題 – xybrek