我使用 org.springframework.util.FileCopyUtils 在我的项目中上传文件。
FileCopyUtils.copy(multipartFile.getBytes(), new FileOutputStream( basePath + "/" + uploadedfile.getFileName()));
它使用FileOutputStream上传文件,对于较小的文件,这工作正常,但我如何上传2GB或更大的文件?
答案 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();
}