SpringMVC实现文件下载

30 篇文章 3 订阅

前言

引入依赖:

 <dependency>
    	<groupId>commons-fileupload</groupId>
    	<artifactId>commons-fileupload</artifactId>
    	<version>1.3.3</version>
    </dependency>
    <dependency>
    	<groupId>commons-io</groupId>
    	<artifactId>commons-io</artifactId>
    	<version>2.2</version>
    </dependency>

前端关键代码:

 <button class="btn btn-w-m btn-primary glyphicon glyphicon-download-alt" type="button"
                                onclick="javascript:downTemplate();">模板下载</button>

Control层代码:

 @RequestMapping(value = "/downloadTemplate")
    public ResponseEntity<byte[]> downTemplate(HttpServletRequest request, @RequestParam("fileName") String fileName,
                                               Model model)throws  Exception{
        //下载文件路径
        String path=request.getSession().getServletContext().getRealPath("/upload/");
        //创建文件对象
        File file=new File(path+File.separator+fileName);
        //设置响应头
        HttpHeaders headers=new HttpHeaders();
        //下载显示的文件名,解决中文名称乱码问题
        String downloadFileName=new String(fileName.getBytes("UTF-8"),"ISO-8859-1");
        //通知浏览器以下载方式(attachment)打开文件
        headers.setContentDispositionFormData("attachment",downloadFileName);
        //定义以二进制流数据(最常见的文件下载)的形式下载返回文件数据
        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
        //使用spring mvc框架的ResponseEntity对象封装返回下载数据
        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
    }

在downTemplate()方法中,首先根据文件路径和需要下载的文件名来创建文件对象,然后对响应头中文件下载时的打开方式即下载方式进行设置,最后返回ResponseEntity封装的下载结果对象。
使用ResponseEntity对象,可以很方便地定义返回的HttpHeaders和HttpStatus,上面代码中MediaType代表的是Internet
Media Type,即互联网媒体类型,也叫做MIME类型。
在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。HttpStatus类型代表的是Http协议中的状态。

实现效果:

1、点击批量模板下载:
在这里插入图片描述
2、可以从左下角看到浏览器成功下载了对应的模板文件。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

别团等shy哥发育

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值