1. 程式人生 > >Spring Boot實現檔案上傳

Spring Boot實現檔案上傳

一、檔案上傳的配置

Spring Boot預設支援檔案上傳,對檔案上傳支援友好。對上傳進行配置如下:

# 配置上傳引數
spring:  
    http:
        multipart:
          enabled: true # 預設支援檔案上傳
          file-size-threshold: 0 # 支援檔案寫入磁碟
          max-file-size: 50MB # 最大檔案上傳大小
          max-request-size: 100MB  # 最大支援請求大小

Spring Boot預設支援檔案上傳,enabled這個可以不用配置,預設支援將檔案寫入磁碟,預設最大檔案大小是1MB,預設最大請求大小是10MB,後面兩個引數常常需要自己重新配置才能達到要求。

二、編寫檔案上傳的Controller

前端頁面的上傳模組可以按照如下編寫:

<form method="POST" enctype="multipart/form-data" action="/index/fileupload">

    檔案:<input type="file" name="lemonFile"/>

    <input type="submit" value="上傳"/>

</form>

注意:表單中方法必須是POST,enctype和action都必須設定。
檔案上傳的Controller如下:

package
com.lemon.springboot.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import
org.springframework.web.multipart.MultipartFile; import java.io.File; import java.io.IOException; import java.util.UUID; /** * @author lemon */ @Controller @RequestMapping("/index") public class IndexController { private static final Logger logger = LoggerFactory.getLogger(IndexController.class); @RequestMapping public String index() { logger.info("訪問主頁"); return "index"; } @RequestMapping(value = "/fileupload", method = RequestMethod.POST) @ResponseBody public String upload(@RequestParam("lemonFile") MultipartFile file) { logger.info("檔案上傳方法訪問成功"); if (file.isEmpty()) { return "檔案上傳失敗"; } // 獲取檔名 String originalFilename = file.getOriginalFilename(); logger.info("上傳檔案的檔名是:" + originalFilename); // 獲取檔案字尾名 String suffixName = originalFilename.substring(originalFilename.lastIndexOf(".")); logger.info("上傳檔案的字尾名是:" + suffixName); // 設定檔案上傳絕對路徑 String filePath = "/Users/lemon/IdeaProjects/springboot/upload/"; // 獲取UUID名稱 String fileName = UUID.randomUUID() + suffixName; // 獲取上傳檔案的File物件 File dest = new File(filePath + fileName); // 開始上傳 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdirs(); } try { file.transferTo(dest); logger.info("上傳成功"); return "上傳成功"; } catch (IllegalStateException | IOException e) { e.printStackTrace(); logger.info(e.getMessage()); } return "上傳失敗"; } }