1.属性配置 注意一点 当value注入时如果只是一个单词的时候 不带点. 注入报异常;不能正常注入
#最大文件大小。值可以使用后缀“MB”或“KB”。指示兆字节或千字节大小。 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB #自定义上传文件保存的路径 upload.file=D:/testUpload/2.文件上传下载controller
@RestController public class FileUpDownloadController { @Value("${upload.file}") private String uploadPath; @PostMapping("/upload") public AjaxResponse uploadFile(@RequestParam("filename")MultipartFile file){ //文件不为空 if(file.isEmpty()){ return AjaxResponse.fail("请选择一个要上传的文件!"); } //文件名字 String filename = file.getOriginalFilename(); long fileSize = file.getSize(); log.info("文件名:"+filename+" 文件大小:"+fileSize); File dest = new File(uploadPath + filename); //文件不存在新建路径 if (!dest.getParentFile().exists()){ dest.getParentFile().mkdir(); } try { //转存文件 file.transferTo(dest); return AjaxResponse.success("文件上传成功!"); } catch (IOException e) { e.printStackTrace(); return AjaxResponse.fail("文件上传失败!"); } } @GetMapping("/download/{filename}") public AjaxResponse downLoadFile(HttpServletResponse response, @PathVariable(value = "filename")String filename){ File dest = new File(uploadPath + filename); try (FileInputStream inputStream = new FileInputStream(dest)) { // 设置被下载而不是被打开 response.setContentType("application/gorce-download"); // 设置被第三方工具打开,设置下载的文件名 response.addHeader("Content-disposition","attachment;fileName="+filename); ServletOutputStream responseOutputStream = response.getOutputStream(); byte[] bytes = new byte[1024]; int len=0; while ((len=inputStream.read(bytes))!=-1){ responseOutputStream.write(bytes,0,len); } return AjaxResponse.success("下载成功!"); }catch (Exception e){ return AjaxResponse.fail("下载失败!"); } } }3.全局异常处理类
@RestControllerAdvice public class CustomExceptionCatch { @Value("${spring.servlet.multipart.max-file-size}") private String fileMax; @ExceptionHandler(value = MaxUploadSizeExceededException.class) public AjaxResponse fileMax(MaxUploadSizeExceededException e){ // e.printStackTrace(); return AjaxResponse.fail("上传文件超过限制大小"+fileMax); } @ExceptionHandler(value = ArithmeticException.class) public AjaxResponse fileMax(ArithmeticException e){ return AjaxResponse.fail(e.getMessage()); } @ExceptionHandler(value = Exception.class) public AjaxResponse fileMax(Exception e){ e.printStackTrace(); return AjaxResponse.fail(e.getMessage()); } }