Spring提供的API實現文件上傳
- 2022 年 8 月 9 日
- 筆記
- spring, Spring Boot
Spring為我們提供了文件上傳介面MultipartRequest
及其實現類StandardMultipartFile
StandardMultipartFile
是StandardMultipartHttpServletRequest
中的private
訪問級別內部類。
MultipartRequest
的使用
場景一:上傳單個文件或多個文件,不傳遞參數
/**
* @RequestParam("file") 可以省略
* @param file
**/
@RequestMapping("/")
public void test1(@RequestParam("file") MultipartFile file){
log.info("文件名:"+file.getOriginalFilename());
}
@RequestMapping("/")
public void test1(@RequestParam("files") MultipartFile[] file){
log.info("文件名:"+file[0].getOriginalFilename());
}
場景二:上傳單個文件或多個文件,前端傳遞參數
/**
* 使用Map接收參數,@RequestParam必須
* @param file
* @param map
*/
@RequestMapping("/")
public void test1(@RequestParam("file") MultipartFile file,@RequestParam Map<String, Object> map){
log.info("文件名:"+file.getOriginalFilename());
log.info("姓名:"+map.get("name"));
log.info("年齡:"+map.get("age"));
}
/**
* request 前端使用form-data格式傳遞,所以可以使用request.getParameter獲取參數
* @param file
* @param request
*/
@RequestMapping("/")
public void test1(@RequestParam("file") MultipartFile file,HttpServletRequest request){
log.info("文件名:"+file.getOriginalFilename());
log.info("姓名:"+request.getParameter("name"));
log.info("年齡:"+request.getParameter("age"));
}
/**
* 使用對應的參數實體類接收,如User
* @param file
* @param user
*/
@RequestMapping("/")
public void test1(@RequestParam("file") MultipartFile file,User user){
log.info("文件名:"+file.getOriginalFilename());
log.info("姓名:"+user.getName());
log.info("年齡:"+user.getAge());
}
StandardMultipartHttpServletRequest
的使用
@RequestMapping("/")
public void test1(HttpServletRequest request){
if(request instanceof StandardMultipartHttpServletRequest){
StandardMultipartHttpServletRequest servletRequest= (StandardMultipartHttpServletRequest) request;
//獲取前端傳入的參數
Map<String, String[]> paramMap=servletRequest.getParameterMap();
//獲取上傳的文件
Map<String, MultipartFile> fileMap = servletRequest.getFileMap();
}
}