【问题标题】:ServletFileUpload, GWT not breaking at to big filesServletFileUpload,GWT 不会中断大文件
【发布时间】:2015-10-20 13:02:38
【问题描述】:

我有一个 GWT 应用程序,我们需要上传文件,但我想限制大小。所以目前我有这个:

ServletFileUpload.isMultipartContent(request);
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(theFactory);
upload.setFileSizeMax(<2mb>);
upload.setSizeMax(<2mb>);

try {
    final List<FileItem> items = upload.parseRequest(request);
    for (FileItem fileItem : items) {
        <do file stuff>
    }
}
catch (FileUploadException e) {
    <break and return error>
}

当我在开发模式下上传一个 300mb+ 的文件时,它一碰到 for 循环就会中断,并说文件在异常中太大了。这发生在我点击上传按钮后一秒钟。

当应用程序部署在 tomcat 上时,它会等待文件完全上传,而不是先中断并拒绝文件。

我知道有一个 tomcat 参数,但我接受上传的文件大小对于不同的 servlet 是非常不同的,我想为 servlet 单独设置这个参数,而不是最大的值,它可能比大多数接受的值大得多价值观。

【问题讨论】:

    标签: java tomcat servlets gwt file-upload


    【解决方案1】:

    您可以在 GWT 中将 ChangeHandler 添加到您的上传按钮,并从中调用本机方法,将按钮的元素传递到:

        private native boolean isFileSizeValid(Element inputFile)/*-{
           var fileToUpdate = inputFile.files[0];
           return fileToUpdate.size < 200...0; // pick the right number
        }-*/;
    

    这适用于单个文件(如果在输入元素上禁用了“多个”)。如果您允许上传多个文件,您可以遍历 files[] 数组的所有项目并进行计算。

    这种方法将帮助您在客户端执行所有验证,但需要客户端浏览器的 FileAPI 支持。 http://caniuse.com/#feat=fileapi

    抱歉,如果您只是在寻找后端验证。

    【讨论】:

    • 您好,感谢您的回答,但我认为这还不够,因为配置位于 web.xml 中,这可能会将其移至第二位。无论如何,将来这可能会派上用场;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-14
    • 2012-10-14
    • 1970-01-01
    • 2016-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多