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 @   pcwen.top  阅读(33118)  评论(3编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
pcwen.top

喜欢请打赏

扫描二维码打赏

了解更多

点击右上角即可分享
微信分享提示