福哥在做SpringBoot开发的时候,需要设计一个允许用户上传文件的接口,发现使用SpringBoot上传文件还是有一点复杂的。所以,福哥就把使用SpringBoot实现文件上传功能的教程记录了下来,分享给大家!
在application.properties里面增加下面的设置
# 开启文件上传 spring.servlet.multipart.enabled=true spring.servlet.multipart.file-size-threshold=0 # 上传文件的临时保存目录 spring.servlet.multipart.location=/tmp/ # 暂时不知道 spring.servlet.multipart.resolve-lazily=true # 单个上传文件尺寸上限 spring.servlet.multipart.max-file-size=100MB # 全部上传文件尺寸上限 spring.servlet.multipart.max-request-size=1000MB
随便建立一个控制器,在里面写上如下代码
@RequestMapping("/me/icon/_upload")
public IconUploadResult postCompanyIconUpload(
@RequestParam("file") MultipartFile file
){
IconUploadResult iconUploadResult = new IconUploadResult();
if(file.isEmpty()){
iconUploadResult.setErrcode(1021011);
iconUploadResult.setErrmsg("upload file is empty");
return iconUploadResult;
}
String fileName = file.getOriginalFilename();
String saveFileDirPath = "/tongfu.net/web/images/icon/";
File saveFile = new File(saveFileDirPath + fileName);
try{
file.transferTo(saveFile);
}
catch (IOException e){
iconUploadResult.setErrcode(1021012);
iconUploadResult.setErrmsg("failed to upload");
return iconUploadResult;
}
iconUploadResult.setErrcode(0);
iconUploadResult.setErrmsg("OK");
return iconUploadResult;
}还用刚刚的控制器,把内容改一改。这次需要使用Servlet获取上传文件了。
@RequestMapping("/me/company/icon/_upload")
public IconUploadResult postCompanyIconUpload(
){
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
List<MultipartFile> file = ((MultipartHttpServletRequest) request).getFiles("file");
IconUploadResult iconUploadResult = new IconUploadResult();
for(int i=0; i<file.size(); i++){
MultipartFile myFile = file.get(i);
if(myFile.isEmpty()){
iconUploadResult.setErrcode(1021011);
iconUploadResult.setErrmsg("upload file is empty");
return iconUploadResult;
}
String fileName = myFile.getOriginalFilename();
String saveFileDirPath = "/tongfu.net/web/images/icon/";
File saveFile = new File(saveFileDirPath + fileName);
try{
myFile.transferTo(saveFile);
}
catch (IOException e){
iconUploadResult.setErrcode(1021012);
iconUploadResult.setErrmsg("failed to upload");
return iconUploadResult;
}
}
iconUploadResult.setErrcode(0);
iconUploadResult.setErrmsg("OK");
return iconUploadResult;
}大多数情况都是上传一个文件,这时候SpringBoot提供了很好封装,处理很方便了。但是,在处理多文件上传的时候(一样的表单元素名称的情况下)还是需要借助最基础的Servlet进行上传文件的获取。这就说明了,基础是很重要的。