Spring Boot實現檔案上傳
阿新 • • 發佈:2019-01-01
一、檔案上傳的配置
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 "上傳失敗";
}
}