配置限制文件上傳大小
servlet:
multipart:
max-file-size: 5MB # 限制文件上傳的大小
SpringMVC會封裝為一個接口:MultipartFile
@Controller @RequestMapping("upload") public class UploadController { @Autowired private UploadService uploadService; /** * 圖片上傳 * @param file * @return */ @PostMapping("image") public ResponseEntity<String> uploadImage(@RequestParam("file") MultipartFile file){ String url = this.uploadService.upload(file); if (StringUtils.isBlank(url)) { return ResponseEntity.badRequest().build(); } return ResponseEntity.status(HttpStatus.CREATED).body(url); } }
對上傳的內容進行校驗:
-
校驗文件大小
-
校驗文件的媒體類型
-
校驗文件的內容
@Service public class UploadService { private static final List<String> CONTENT_TYPES = Arrays.asList("image/jpeg", "image/gif"); private static final Logger LOGGER = LoggerFactory.getLogger(UploadService.class); public String upload(MultipartFile file) { String originalFilename = file.getOriginalFilename(); // 校驗文件的類型 String contentType = file.getContentType(); if (!CONTENT_TYPES.contains(contentType)){ // 文件類型不合法,直接返回null LOGGER.info("文件類型不合法:{}", originalFilename); return null; } try { // 校驗文件的內容 BufferedImage bufferedImage = ImageIO.read(file.getInputStream()); if (bufferedImage == null){ LOGGER.info("文件內容不合法:{}", originalFilename); return null; } // 保存到服務器 file.transferTo(new File("C:\\test\\images\\" + originalFilename)); // 生成url地址,返回 return "http://image.test.com/" + originalFilename; } catch (IOException e) { LOGGER.info("服務器內部錯誤:{}", originalFilename); e.printStackTrace(); } return null; } }