介绍
介绍
福哥在做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进行上传文件的获取。这就说明了,基础是很重要的。