1. 程式人生 > >springmvc上傳圖片《2》

springmvc上傳圖片《2》

進行 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

在上傳文件過程中,我們需要對上傳的內容進行校驗:

  1. 校驗文件大小
  2. 校驗文件的媒體類型
  3. 校驗文件的內容

文件大小在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》