springmvc上傳圖片《2》
阿新 • • 發佈:2018-10-06
進行 this ica suffix 添加 tran lan input edi
創建springboot項目
編寫配置
server: port: 8082 spring: application: name: upload-service servlet: multipart: max-file-size: 5MB # 限制文件上傳的大小
需要註意的是,我們應該添加了限制文件大小的配置
controller
編寫controller需要知道4個內容:
- 請求方式:上傳肯定是POST
- 請求路徑:/upload/image
- 請求參數:文件,參數名是file,SpringMVC會封裝為一個接口:MultipleFile
- 返回結果:上傳成功後得到的文件的url路徑
@RestController @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)) { // url為空,證明上傳失敗 return new ResponseEntity<>(HttpStatus.BAD_REQUEST); } // 返回200,並且攜帶url路徑 return ResponseEntity.ok(url); } }
service
在上傳文件過程中,我們需要對上傳的內容進行校驗:
- 校驗文件大小
- 校驗文件的媒體類型
- 校驗文件的內容
文件大小在Spring的配置文件中設置,因此已經會被校驗,我們不用管。
@Service public class UploadService { private static final Logger logger = LoggerFactory.getLogger(UploadController.class); // 支持的文件類型 private static final List<String> suffixes = Arrays.asList("image/png", "image/jpeg"); public String upload(MultipartFile file) { try { // 1、圖片信息校驗 // 1)校驗文件類型 String type = file.getContentType(); if (!suffixes.contains(type)) { logger.info("上傳失敗,文件類型不匹配:{}", type); return null; } // 2)校驗圖片內容 BufferedImage image = ImageIO.read(file.getInputStream()); if (image == null) { logger.info("上傳失敗,文件內容不符合要求"); return null; } // 2、保存圖片 // 2.1、生成保存目錄 File dir = new File("D:\\heima\\upload"); if (!dir.exists()) { dir.mkdirs(); } // 2.2、保存圖片 file.transferTo(new File(dir, file.getOriginalFilename())); // 2.3、拼接圖片地址 String url = "http://image.leyou.com/upload/" + file.getOriginalFilename(); return url; } catch (Exception e) { return null; } } }
springmvc上傳圖片《2》