使用FileCopyUtils.copy在spring中上传大文件

时间:2016-06-15 09:14:17

标签: java spring spring-mvc

我使用 org.springframework.util.FileCopyUtils 在我的项目中上传文件。

FileCopyUtils.copy(multipartFile.getBytes(), new FileOutputStream( basePath + "/" + uploadedfile.getFileName()));

它使用FileOutputStream上传文件,对于较小的文件,这工作正常,但我如何上传2GB或更大的文件?

2 个答案:

答案 0 :(得分:1)

这可能有所帮助:

我们要检查的第一件事是 -

multipartResolver maxUploadSize:单个请求的最大上传大小。这意味着所有上传文件的总大小不能超过此配置的最大值。默认值为无限制(值为-1)。

我们要检查的第二件事是 -

您用于运行应用程序的服务器?

如果是tomcat那么, 你必须在其中做一些配置

参考:https://tomcat.apache.org/tomcat-7.0-doc/config/http.html

maxPostSize

POST的最大字节数,将由容器FORM URL参数解析处理。可以通过将此属性设置为小于或等于0的值来禁用该限制。如果未指定,则此属性设置为2097152(2兆字节)。

另一个限制是:

maxHttpHeaderSize请求和响应HTTP标头的最大大小,以字节为单位指定。如果未指定,则此属性设置为4096(4 KB)。

您可以在

中找到它们

$ TOMCAT_HOME / CONF / server.xml中

<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           maxPostSize="4294967296"
           redirectPort="8443" />

这会将最大文件上传大小设置为4GB。

答案 1 :(得分:1)

根据@ m-deinum的评论,我最后使用org.springframework.util.StreamUtils上传大文件:

StreamUtils.copy(multipartFile.getInputStream(), new FileOutputStream( basePath + "/" + uploadedfile.getFileName()));

我使用输入流而不是byte []来上传文件,也用于读取(下载)文件我使用InputStream:

try {
        inputStream = new FileInputStream(basePath + "/" + fileName);
        byte[] buffer = new byte[4096];
        int bytesRead = 0;
        do {
            bytesRead = inputStream.read(buffer, 0, buffer.length);
            httpServletResponse.getOutputStream().write(buffer, 0, bytesRead);
        } while (bytesRead == buffer.length);

        /* some code for set attributes to httpServletResponse */
    } finally {
        if (inputStream != null)
            inputStream.close();
    }