基于SSM框架的使用MultipartFile实现文件的下载

本文介绍如何利用SSM框架中的MultipartFile组件实现文件下载功能。通过设置响应编码、获取文件名、判断文件存在并指定HTTP响应类型及头信息,实现在网页上点击即可下载位于本地E盘的指定PDF文件。

关于单个文件或多个文件的上传,上一篇博文已经记录了下来,这次聊聊文件的下载。

                                                                                                                                            ——@Yelihu2018年9月20日 23:35:58

    文件的下载还依然是使用MultipartFile这个组件,关于相关配置文件的配置,上一篇博文已经记录,这里就不在多赘述

功能实现的效果是,进入一个网页的页面,出来一个下载框,就可以下载一个指定的文件,这个文件暂时存放在本地的E盘之下,

实际开发的时候,关于文件的路径和文件的名称,还是要设置为可配置的路径和动态获取的文件名,比如从数据库中读取出文件名和文件路径,这个Demo里面仅为设置了读取文件的路径为E盘。

代码如下:

 @RequestMapping(value="/downloadtest")
    public String downloadtest(HttpServletResponse response){

        //设置字符编码
        response.setCharacterEncoding("UTF-8");

        //通过输出流写到客户端
        //获取文件名字(全名+后缀)(实际开发中应该设置为从数据库中动态获取)
        String fileName = "2018线性代数辅导讲义(汤家凤) (1)1537405630070.pdf";

        //通过Paths工具类获取一个path对象
        Path path = Paths.get(parentPath,fileName);

        //判断文件是否存在
        if(Files.exists(path)){
            System.out.println("文件存在!");
            //存在就下载
            //通过response设定他的相应类型
            //获取文件后缀
            String fileSuffix =fileName.substring(fileName.lastIndexOf(".")+1);

            //设置contentType,指定该响应类型 即可下载
            response.setContentType("application/"+fileSuffix);

            //重要!:根据HTTP协议的规范,添加头信息,影响浏览器执行下载的行为
            try {
                response.addHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("utf-8"),"ISO8859-1"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            //通过path写入文件
            try {
                Files.copy(path,response.getOutputStream());
            } catch (IOException e) {
                e.printStackTrace();
            }


        }

        //跳转到响应页面
        return "system/plansubmit/download_success";
    }
  1. 首先要字符编码,不然会出现下载的文件文件名中中文部分为空格。
    response.setCharacterEncoding("UTF-8");
  2. 获取文件名,我这里直接定死了是E盘路径下,叫做"2018线性代数辅导讲义(汤家凤) (1)1537405630070.pdf"的pdf文件
  3. 通过Path获取一个path对象构造一个Path对象来表示一个文件路径,或者一个文件。
  4. 截取文件名称的前缀(不包括.pdf部分)
  5. 判断文件存在之后,根据HTTP协议所指定的响应类型(response.setContentType("application/"+fileSuffix);)
  6. 重要:根据HTTP协议的规范,添加头信息,影响浏览器执行下载的行为(response.addHeader("Content-Disposition","attachment;filename="+new String(fileName.getBytes("utf-8"),"ISO8859-1")); )
  7. 通过files下载文件

 

至此,在跳转到的页面上已经完全能下载到一个存在在E盘的这个指定的pdf文件了。

重点:响应类型的指定,和头信息的指定

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值