zoukankan      html  css  js  c++  java
  • springboot中的文件上传与下载

    首先回忆一下springmvc中的文件上传

    1)引入文件上传相关jar包,commons-io 、commons-fileupload

    2)文件上传表单提交方式必须为post

    3)要求表单的enctype属性必须为:multipart/form-data

    4)后台接收文件时,使用multipartFile 变量与前端name属性值保持一致

    5)在springmvc的配置文件中必须加入,且id是框架规定写死的。

      <bean  id="multipartResolver" class="CommonsMultipartResolver">

    springboot中的文件上传

    1)在springboot项目中,自动引入了有关文件上传的jar包 commons-io、commons-file

    2)准备表单

      提交方式:post    enctype="multipart/form-data"

    <form action="${pageContext.request.contextPath}/upload/test" method="post" enctype="multipart/form-data">
       <input type="file" name="fileTest"/>
       <input type="submit" value="上传"/>
    </form>

    3)后台控制器方法参数multipart 和 前台name属性值保持一致

    @Controller
    @RequestMapping("/upload")
    public class uploadController {
        @RequestMapping("/test")
        public String upload(MultipartFile fileTest, HttpServletRequest request) throws IOException {
            //获取文件的原始名
            String filename = fileTest.getOriginalFilename();
            System.out.println(filename);
            //根据相对路径获取绝对路径
            String realPath = request.getSession().getServletContext().getRealPath("/upload");
            fileTest.transferTo(new File(realPath,filename));
            return "success";
        }
    }

    4)修改springboot中默认上传文件大小(为1M)

    #更改上传文件的大小上限
      http:
        multipart:
          max-file-size: 100MB        //最大上限为100MB
          max-request-size: 100MB     //最大请求上限与max-file-size保持一致

    springboot中的文件下载

    1)页面中提供一个下载的链接

    <a href="${pageContext.request.contextPath}/download/test?fileName=idea快捷键.txt">点我下载</a>

    2)开发下载文件的controller

    下载文件的过程是一个读写操作,将文件读入输入流,然后通过输出流读出,读出的时候动态设置响应类型

    @Controller
    @RequestMapping("/download")
    public class downloadController {
        @RequestMapping("/test")
        public void download(String fileName, HttpServletRequest request, HttpServletResponse response) throws Exception {
            //获取文件的绝对路径
            String realPath = request.getSession().getServletContext().getRealPath("upload");
            //获取输入流对象(用于读文件)
            FileInputStream fis = new FileInputStream(new File(realPath, fileName));
          //获取文件后缀(.txt)
            String extendFileName = fileName.substring(fileName.lastIndexOf('.'));
            //动态设置响应类型,根据前台传递文件类型设置响应类型
            response.setContentType(request.getSession().getServletContext().getMimeType(extendFileName));
            //设置响应头,attachment表示以附件的形式下载,inline表示在线打开
            response.setHeader("content-disposition","attachment;fileName="+URLEncoder.encode(fileName,"UTF-8"));
             //获取输出流对象(用于写文件)
            ServletOutputStream os = response.getOutputStream();
          //下载文件,使用spring框架中的FileCopyUtils工具
          FileCopyUtils.copy(fis,os);
    
        }
    }
  • 相关阅读:
    运维人员常用的linux命令汇总
    Linux 入侵痕迹清理技巧
    xshell突出显示
    Linux终端显示中文
    mysql8.0设uuid函数为默认值
    Linux使用NFS作为文件共享目录服务
    修改docker运行容器的映射端口
    Apache-kafka以及zookeepeer单机安装
    kafka-confluent管控中心安装
    记CentOS8下安装Docker
  • 原文地址:https://www.cnblogs.com/lkldeblog/p/10637025.html
Copyright © 2011-2022 走看看