<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
<!-- 上传定义 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 100000 btyes --> <property name="maxUploadSize" value="20971520"/> </bean>
若是没有配置multipartResolver,将会报:
java.lang.IllegalArgumentException: Expected MultipartHttpServletRequest: is a MultipartResolver configured?
@Controller @Api(value = "FileUploadController", description = "文件上传控制器") public class FileUploadController { /** * 文件上传接口方法 * @param multipartFiles 文件 * @param fileType 文件类型 * @param request 请求 * @param response 响应 * @return Map */ @ResponseBody @ApiOperation(value = "文件上传接口", httpMethod = "POST") @RequestMapping(value = "/common/uploadfile", method = RequestMethod.POST) public ResponseData uploadFile(@RequestParam("file") MultipartFile[] multipartFiles, @RequestParam(required = false) String fileType, HttpServletRequest request, HttpServletResponse response) { /* * 1.若是只是上传一个文件,则只须要MultipartFile类型接收文件便可,并且无需显式指定@RequestParam注解 * 2.若是想上传多个文件,那么这里就要用MultipartFile[]类型来接收文件,而且还要指定@RequestParam注解 * 3.上传多个文件时,前台页面中的全部<input type="file"/>的name都应该是multipartFiles,不然参数里的multipartFiles没法获取到全部上传的文件 * 4.多种格式文件上传,日期分文件夹,资质文件放到特定文件夹 */ //记录上传过程信息,返回前台 List<FileUploadEntity> list = new ArrayList<>(); String dirName ; // 上传文件保存的路径 if("qualification".equals(fileType)){ // 资质文件存放到特定文件夹 dirName = "qualification"; } else { // 其余格式文件存放到日期命名文件夹 dirName = DateUtil.newDateString("yyyy-MM-dd"); } /* * 判断是否存在文件夹 */ //若是用的是Tomcat服务器,则文件会上传到{服务发布位置}/upload/文件夹下 String realPath = request.getSession().getServletContext().getRealPath("/upload/" + dirName); File realPathDir = new File(realPath); if(!realPathDir.isDirectory() && !realPathDir.exists()){ realPathDir .mkdirs(); } /* * 多文件循环遍历上传 */ for (MultipartFile multipartFile : multipartFiles) { //记录上传过程信息,返回前台 FileUploadEntity fileUploadEntity = new FileUploadEntity(); if (!multipartFile.isEmpty()) { // 惟一化文件名 String newFileName = UUID.randomUUID().toString().replaceAll("-", ""); // 获取源文件拓展名 String fileExtensionName = FileUtil.getFileExtensionName(multipartFile.getOriginalFilename()); // 拼接拓展名 newFileName = StringUtils.isNotEmpty(fileExtensionName) ? newFileName + "." + fileExtensionName : multipartFile.getOriginalFilename(); // 文件相对路径 String relativePath = "/upload/" + dirName + "/" + newFileName; fileUploadEntity.setCode(200); fileUploadEntity.setFileName(multipartFile.getOriginalFilename()); fileUploadEntity.setFilePath(relativePath); fileUploadEntity.setUploadDate(DateUtil.newDateString(DateUtil.TIME_FORMAT_FULL)); try { //这里没必要处理IO流关闭的问题,由于FileUtils.copyInputStreamToFile()方法内部会自动把用到的IO流关掉 //FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), new File(realPath, multipartFile.getOriginalFilename())); //这里没必要处理IO流关闭的问题,由于transferTo方法的实现中会自动关闭IO流 multipartFile.transferTo(new File(realPath, newFileName)); } catch (IOException e) { e.printStackTrace(); fileUploadEntity.setCode(500); } list.add(fileUploadEntity); } } return ResponseData.ok(list); } }
注意:@RequestParam("file")这里必须加入value值,不然多文件时接收不到java