SpringBoot 文件上传、下载、设置大小

本文使用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

 

以上。

 

 

posted @ 2018-07-03 21:56  pcwen.top  阅读(32530)  评论(3编辑  收藏  举报
pcwen.top