无法上传大于10MB的文件?

时间:2017-07-03 09:11:10

标签: java upload jetty restlet

以下是我上传文件的代码:

@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;
}

当部署在Jetty(Java 8)中时,它适用于文件大小低于10MB,小文件(如1-2 MB),当文件大于10MB +上传失败时,Restet可能出错或者码头?

2 个答案:

答案 0 :(得分:0)

在Server实例上设置属性以修改最大内容大小。 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>

答案 1 :(得分:0)

此问题的解决方法是在Jetty前面更新NGINX服务器的最大有效负载大小。