Spring Boot 上傳文件
依賴jar
pom.xml
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
java
@RestController
@RequestMapping
public class UploadController {
@RequestMapping(value = "/uploadDelta.do")
@ResponseBody
public Map<String, Object> updateDelta(MultipartFile file) {
Map<String, Object> result = new HashMap<String, Object>();
String rootFilePath = uploadpath;
//文件最後保存的目錄
String path_save =
"/" + paramer.getProjectId() + "/" + deltaEntity.getId() + "/";/**文件保存路徑(沒有文件名稱)**/
String saveFilePath = rootFilePath + path_save;
File allPathFile = new File(saveFilePath);
if (!allPathFile.exists()) {
allPathFile.mkdirs();
logger.info("創建文件夾,路徑:" + allPathFile);
}
Map<String, String> map = new HashMap<String, String>();
String fileName = paramer.getFile().getOriginalFilename(); //獲取文件名
String[] fileNameSplit = fileName.split("\\.");//獲取文件拓展名
String compress = fileNameSplit[fileNameSplit.length - 1];
String randomFilename = UUID.randomUUID().toString() + "." + compress;
File destFile = new File(saveFilePath + randomFilename);//隨機生成的文件名
logger.info("文件保存路徑:" + saveFilePath + randomFilename);
try {//文件寫入硬盤
paramer.getFile().transferTo(new File(saveFilePath + randomFilename));
} catch (Exception e) {
e.printStackTrace();
logger.error("文件保存到硬盤失敗");
result.put("status", ResultParams.PROJECT_FAIL_STATUS);
result.put("msg", "文件上傳失敗");
return result;
}
return null;
}
}
大文件上傳異常
spring boot 限制一次表單提交總共文件的最大大小爲10MB,每一個文件的大小爲1MB.
MultipartProperties
private String maxFileSize = "1Mb";
private String maxRequestSize = "10Mb";
解決方法
- 直接通過配置文件解決
application.properties
spring.http.multipart.max-request-size=1024MB
# 大小設置爲1G
spring.http.multipart.max-file-size=1024MB
# 大小設置爲1G
- 通過代碼層級修改文件上傳大小限制
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@Bean(name = "multipartResolver")
public MultipartResolver multipartResolver() {
CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setDefaultEncoding("UTF-8");
resolver.setResolveLazily(true);//resolveLazily屬性啓用是爲了推遲文件解析,以在在UploadAction中捕獲文件大小異常
resolver.setMaxInMemorySize(40960);
resolver.setMaxUploadSize(500 * 1024 * 1024);//上傳文件大小 50M 50*1024*1024
return resolver;
}
在spring boot 1.5.4版本中可以直接通過 @Bean("multipartResolver")
進行注入。