Spring Boot中的文件上传与下载

本文详细介绍了一个基于Spring Boot的文件上传和下载功能实现,包括后台代码处理流程、前端表单配置及上传大小限制调整方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 后台代码

  • MultipartFile aa  包含二进制数据和文件名称
    @RequestMapping("upload")
    //文件上传
    public String upload(MultipartFile aa, HttpServletRequest request) throws IOException {
        //以相对路径获取绝对路径 (这的路径是你要将文件上传的路径)
        //这里MultipartFile aa  包含二进制数据和文件名称
        String realPath = request.getSession().getServletContext().getRealPath("files");
        //获取原文件名
        String originalFilename = aa.getOriginalFilename();
        //创建日期文件夹
        String dateDir = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
        File finalPath = new File(realPath, dateDir);
        //文件夹不存在就创建
        if(!finalPath.exists()){
            finalPath.mkdirs();
        }
        //上传文件
        aa.transferTo(new File(finalPath,originalFilename));
        //简单版本的其实就一行代码就行
        //aa.transferTo(new File(request.getSession().getServletContext().getRealPath("files"),aa.originalFilename);
        return "upload";
    }

    @RequestMapping("download")
    //文件下载
    public String download(String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
        //获取绝对路径
        String realPath = request.getSession().getServletContext().getRealPath("/files/2019-07-19");
        //读取文件
        FileInputStream is = new FileInputStream(new File(realPath,fileName));
        //设置响应头信息
        response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(fileName,"UTF-8"));
        //设置响应类型
        String mimeType = request.getSession().getServletContext().getMimeType("." + FilenameUtils.getExtension(fileName));
        response.setContentType(mimeType+";charset=UTF-8");
        //获取响应输出流
        ServletOutputStream os = response.getOutputStream();
        //文件拷贝
        IOUtils.copy(is,os);
        IOUtils.closeQuietly(is);
        IOUtils.closeQuietly(os);

        return null;
    }
  • 前台代码

    <!--点击上传-->
    <form action="${pageContext.request.contextPath}/file/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="aa">
        <input type="submit" value="提交">
    </form>
    
    <!--点击下载-->
    <href="${pageContext.request.contextPath}/file/download?fileName=1.jpg">1.jpg</a>


<!--
  1. 表单提交方式必须是post
  2. 表单的enctype属性必须为multipart/form-data
  3. 后台接受变量名字要与文件选择name属性一致
-->
  • 修改文件上传大小

#上传时出现如下异常:  上传文件的大小超出默认配置  默认10M   
nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (38443713) exceeds the configured maximum (10485760)

#修改上传文件大小:  (SpringBoot 1.5.7 版本)
spring:
  http:
    multipart:
       max-request-size: 209715200  #用来控制文件上传大小的限制
       max-file-size: 209715200 #用来指定服务端最大文件大小 

#修改上传文件大小:  (SpringBoot 2.0.6 版本)
spring:
  servlet:
    multipart:
      enabled: true
      max-file-size: 10Mb  #用来指定服务端最大文件大小
      max-request-size: 50Mb #用来控制文件上传大小的限制
  • 注意事项

不要忘记关流,一定要设置响应头信息,否则会出现中文乱码,前台form表单不要忘了加enctype属性为multipart/form-data

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值