• SpringBoot文件上传和下载


    SpringBoot文件上传和下载

    一、SpringBoot文件上传

    1、SpringMVC文件上传

    1、Client处理 选择文件
       (1)form表单 选择文件 method="post"
       (2)enctype="multipart/form-data"
        (3) 准备文件框
    
    2、服务端准备存储上传文件的目录 新建文件夹
    项目/webapp/upload文件
    3、开发文件上传Controller
    public String fileUpload(MultipartFile upload){
    //接收数据
    //调用业务 接收的文件--》服务文件目录中 文件拷贝
    upload.transforTo(new File(父目录,当前文件名))
    //跳转页面
    return "ok" //ok.jsp
    }
    4、配置文件上传解析器CommonsMultipartResolver id必须为MulyipartResolver
    5、commons-fileUpload[引入] Commons-io
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    2、SpringBoot文件上传

    • 文件上传所需依赖

      org.springframework.boot spring-boot-starter-parent 2.2.5.RELEASE org.springframework.boot spring-boot-starter-web org.apache.tomcat.embed tomcat-embed-jasper commons-fileupload commons-fileupload 1.3.1
    • Application.yml文件配置

      server:
      port: 8080
      servlet:
      jsp:
      init-parameters.development: true #开启jsp页面的热部署
      spring:
      mvc:
      view:
      prefix: /
      suffix: .jsp

    (1)单个文件上传案例

    • 前端

      <%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>

    • 控制层

      @Controller
      @RequestMapping(“file”)
      public class upload {
      @RequestMapping(“upload”)
      public String upload(MultipartFile upload, HttpServletRequest request) throws IOException {
      String realPath = request.getSession().getServletContext().getRealPath(“upload”);
      //调用业务 文件拷贝
      //处理文件名 UUID拼串=uuid+“.”+扩展名
      String s = UUID.randomUUID().toString().replace(“-”, “”) + “.” + FilenameUtils.getExtension(upload.getOriginalFilename());
      //调用业务 文件拷贝
      upload.transferTo(new File(realPath,s));
      return “index”;
      }
      }

    (2)多个文件上传案例

    • 前端

      <%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>

    • 控制层

      /**

      • @author 王恒杰
      • @date 2021/11/26 10:24
      • @Description:
        */
        @Controller
        @RequestMapping(“file”)
        public class upload {
        @RequestMapping(“upload”)
        public String upload(MultipartFile[] upload, HttpServletRequest request) throws IOException {
        for (int i = 0; i < upload.length; i++) {
        //考虑有用户没有上传文件
        if(upload[i]!=null){
        String realPath = request.getSession().getServletContext().getRealPath(“upload”);
        //处理文件名 UUID拼串=uuid+“.”+扩展名 对文件名定义唯一标识
        String s = UUID.randomUUID().toString().replace(“-”, “”) + “.” + FilenameUtils.getExtension(upload[i].getOriginalFilename());
        //调用业务 文件拷贝
        upload[i].transferTo(new File(realPath,s));
        }
        }
        return “index”;
        }
        }

    (3)文件上传大小设置

    • 上传三个视频大小大概有100M

    • 报错,显示文件太大

    • SpringBoot内置文件大小是10M

    • 我们应该在application.yml中对文件大小进行设置

      #修改文件上传大小的限制
      servlet:
      multipart:
      max-file-size: 209715200 #用来控制文件的上传
      max-request-size: 209715200 #用来指定服务端最大文件大小

    • application.properties

      #修改文件上传的大小限制
      #设置上传的文件大小
      spring.servlet.multipart.max-file-size=100MB
      #设置请求携带数据的大小
      spring.servlet.multipart.max-request-size=100MB

    二、文件下载

    1、SpringMvc中文件下载

    (1)在服务端文件系统中存储可以供下载的文件

    项目/webapp/download

                       aa.txt
    
                        bb.txt
    
    • 1
    • 2
    • 3

    (2)在Client提供可以下载链接

    下载 aa.txt
    
    • 1

    (3)开发文件下载Controller

    public String downLoad(String fileName,HttpRequest request,HttpResponse response){
      //接收数据 要下载的文件名
      //调用业务 服务器文件---》Client
         a、根据文件名去服务器上加载对应文件 输入流
         InputStream is=new FileInputStream(new File(request.getSession().getServletVContext().getRealPath("/download"),fileName));
         b、获取响应输出流
        PrintWriter out= response.getWriter();
        c、文件下载的方式 inline:浏览器尝试打开,默认形式 attachment:附件形式下载
        response.setHeader("content-disposition","attachment;filename="+ERLEncoder.encode(fileName,"UTF-8"))
        d、拷贝文件
        IOutil.copy(加载文件的输入流,响应输出流)
        e、关闭资源
        IoUtil.
      //跳转页面
      return null;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    2、SpringBoot文件下载

    • 文件上传所需依赖

      org.springframework.boot spring-boot-starter-parent 2.2.5.RELEASE org.springframework.boot spring-boot-starter-web org.apache.tomcat.embed tomcat-embed-jasper commons-fileupload commons-fileupload 1.3.1
    • Application.yml文件配置

      server:
      port: 8080
      servlet:
      jsp:
      init-parameters.development: true #开启jsp页面的热部署
      spring:
      mvc:
      view:
      prefix: /
      suffix: .jsp

    • 前端页面

      <%@ page contentType=“text/html;charset=UTF-8” language=“java” isELIgnored=“false” %>

      文件上传

      下载 a.txt 下载 b.txt
    • 控制层

      @Controller
      @RequestMapping(“file”)
      public class upload {
      @RequestMapping(“download”)
      public String download(String fileName, HttpServletRequest request, HttpServletResponse response) throws IOException {
      //接收数据 文件名
      //文件下载
      //1、加载服务器指定名
      String realPath = request.getSession().getServletContext().getRealPath(“/download”);
      FileInputStream is = new FileInputStream(new File(realPath, fileName));
      //2、设置文件下载方式
      response.setHeader(“content-disposition”,“attachment;filename=”+ URLEncoder.encode(fileName,“utf-8”));
      //3、获取响应输出流
      PrintWriter writer = response.getWriter();
      //4、流数据交换
      IOUtils.copy(is,writer);
      //5、关闭资源
      IOUtils.closeQuietly(is);
      IOUtils.closeQuietly(writer);
      return null;
      }

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    动态分区算法
    【数据结构】—带头双向循环链表的实现(完美链表)
    机器学习入门案例(2)之使用逻辑回归预测房子是否能被租出去
    武汉理工大学 Python程序设计第六章测验
    英语六级-day10
    VALSE2022天津线下参会个人总结8月24日-3
    React源码分析7-state计算流程和优先级
    tcp checksum 0xffff instead of 0x0000 see rfc 1624
    【2024】TCP、UDP和 HTTP 的区别是?
    2022年10月27日下午工作日志
  • 原文地址:https://blog.csdn.net/m0_67403076/article/details/126115096