Spring提供的API實現文件上傳

Spring為我們提供了文件上傳介面MultipartRequest及其實現類StandardMultipartFile
StandardMultipartFileStandardMultipartHttpServletRequest中的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();
        }
    }