1. 程式人生 > >SpringBoot 文件上傳、下載、設置大小

SpringBoot 文件上傳、下載、設置大小

study catch mat filesize http stack action output 1.4

本文使用SpringBoot的版本為2.0.3.RELEASE

1.上傳單個文件

①html對應的提交表單

 <form action="uploadFile" method="post" enctype="multipart/form-data">
        <p>選擇文件: <input type="file" name="fileName"/></p>
        <p><input type="submit" value="提交"/></p>
 </form>

②Boot中的處理代碼。這裏要註意

@RequestMapping("/uploadFile") 對應 action="uploadFile"

@RequestParam("fileName") 對應 name="fileName"

    @RequestMapping("/uploadFile")
    @ResponseBody
    public String uploadFile(@RequestParam("fileName") MultipartFile file) {
        //判斷文件是否為空
        if (file.isEmpty()) {
            return
"-1"; } String fileName = file.getOriginalFilename(); //加個時間戳,盡量避免文件名稱重復 String path = "D:/" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + fileName; File dest = new File(path); //判斷文件是否已經存在 if (dest.exists()) {
return "-2"; } //判斷文件父目錄是否存在 if (!dest.getParentFile().exists()) { dest.getParentFile().mkdir(); } try { file.transferTo(dest); //保存文件 } catch (IOException e) { return "-3"; } return "0"; }

2.上傳多個文件

①html對應的提交表單

    <form action="uploadMultifile" method="post" enctype="multipart/form-data" >
        <p>選擇文件1: <input type="file" name="fileName"/></p>
        <p>選擇文件2: <input type="file" name="fileName"/></p>
        <p>選擇文件3: <input type="file" name="fileName"/></p>
        <p><input type="submit" value="提交"/></p>
    </form>

②Boot中的處理代碼。

    @RequestMapping("/uploadMultifile")
    @ResponseBody
    public String keywordSubmitFile(@RequestParam("fileName") List<MultipartFile> files) {
        for (MultipartFile file : files) {
            //這裏簡單輸出文件名稱
            System.out.println(file.getOriginalFilename());
        }
        return "0";
    }

3.下載文件

@RequestMapping("/downloadFile") 
    @ResponseBody
    public String downloadFile(HttpServletResponse response, @RequestParam("fileName") String filePathName) {
        File file = new File(filePathName);
        if (!file.exists()) {
            return "-1";
        }

        response.reset();
        response.setHeader("Content-Disposition", "attachment;fileName=" + filePathName);

        try {
            InputStream inStream = new FileInputStream(filePathName);
            OutputStream os = response.getOutputStream();

            byte[] buff = new byte[1024];
            int len = -1;
            while ((len = inStream.read(buff)) > 0) {
                os.write(buff, 0, len);
            }
            os.flush();
            os.close();

            inStream.close();
        } catch (Exception e) {
            e.printStackTrace();
            return "-2";
        }

        return "0";
    }

4.設置上傳下載文件大小

①根據不同版本,對應的設置值不一樣

Spring Boot 1.3.x and earlier

  • multipart.maxFileSize
  • multipart.maxRequestSize

Spring Boot 1.4.x and 1.5.x

  • spring.http.multipart.maxFileSize
  • spring.http.multipart.maxRequestSize

Spring Boot 2.x

  • spring.servlet.multipart.maxFileSize
  • spring.servlet.multipart.maxRequestSize

②比如在2.x的版本,則在項目的application.properties文件中設置30MB大小

spring.servlet.multipart.maxFileSize=30MB
spring.servlet.multipart.maxRequestSize=30MB

如果不限制大小,則設置為-1即可

spring.servlet.multipart.maxFileSize=-1
spring.servlet.multipart.maxRequestSize=-1

參考:

《Spring Boot入門——文件上傳與下載》

《I am trying to set maxFileSize but it is not honored》

以上。

 

SpringBoot 文件上傳、下載、設置大小