Java servlet 无法接收大文件

标签 java spring maven servlets tomcat7

我用 Maven 和 Spring 构建了一个 Java servlet 服务器,我将大文件从 android 设备发送到服务器。我已成功发送大小为 6MB 到 41MB 的文件,但是当我尝试发送大小为 100MB 或更大的文件时,我在服务器上收到以下错误:

org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Stream ended unexpectedly 

发生这种情况是因为服务器无法处理这种大小的请求吗?是否可以增加允许文件的大小?怎么办?

这是我的服务器代码:

try {
            List<FileItem> items = new ServletFileUpload(new DiskFileItemFactory()).parseRequest(request);//Error happens here
            List<File> files = new ArrayList<File>();//Holds all the files that were received
            HashMap<String, String> map = new HashMap<String, String>();
            for (FileItem item : items) {
                if (item.isFormField()) {
                    // Process regular form field (input type="text|radio|checkbox|etc", select, etc).
                    String fieldName = item.getFieldName();
                    String fieldValue = item.getString();

                map.put(fieldName, fieldValue);
            } else {
                // Process form file field (input type="file").
                String fileName = FilenameUtils.getName(item.getName());//If the name was not specified set default

                String filePath = Constants.ORIGINAL_DIRECTORY_PATH + new SecureRandom().nextInt() + "_" +fileName;
                File storeFile = new File(filePath);
                item.write(storeFile);

                files.add(storeFile);
            }
        }
    } catch (FileUploadException e) {
        throw new ServletException("Cannot parse multipart request.", e);
    }

最佳答案

从消息来看,连接似乎被客户端或服务器或中间的某个代理关闭。

连接通常在发生超时时关闭。

虽然通常我不希望在文件上传期间发生超时,但如果您的服务器出现内存问题并且 GC 正在努力工作,它仍然会发生。所以我建议在文件上传期间监控 GC 时间。如果很高,则说明您有内存问题,不应将文件的全部内容存储在内存中。

关于Java servlet 无法接收大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45640536/

相关文章:

java - 使用 hibernate-envers 时,AUD 表中的所有 @Version 字段均为 null,但在实体中 - 表已填充好吗?

java - 类不是使用 maven-jaxb2-plugin 从 xsd 生成的吗?

java - Gradle:从下载的 POM 中获取 Maven 存储库列表

java - 在使用斯坦福 NLP 时遇到与内存相关的异常该怎么办?

java - Java 和 Android 之间的不一致行为

java - 无法构建 Shopizer 项目

java - HTTP 状态 415 – 不支持的媒体类型错误

java - 如何不在对象和用户输入中重复验证代码

java - 在 Java 中存储对单个 SecureRandom 的引用?

java - 使用 ehcache 缓存 java.util.Map