springboot+vue+element-ui下载excel模板

本代码基于Vue项目(此处暂不做深入,仅对文件流下载做一个记录)

  1. HTML部分
    <div><el-button @click="download">下载</el-button><div>
  2. javascript部分
    download() {
        let _this = this;
        let fileName = `单位客户导入模板_${new Date().getTime()}.xlsx`;
        axios({
            method: 'POST',
            url: `/download/${new Date().getTime()}`,
            data: {},
            responseType: 'blob'
        }).then(response => {
            if (!response) {
                return
            }
            _this.$message({
                type:'info',
                showClose:true,
                duration:3000,
                message:`已成功下载文件!${fileName}`
            });
            const blob = new Blob([response.data])
            debugger;
            if (window.navigator && window.navigator.msSaveOrOpenBlob) {
                navigator.msSaveBlob(blob, fileName)
            } else {
                let u = window.URL.createObjectURL(response.data)
                let aLink = document.createElement('a')
                aLink.style.display = 'none'
                aLink.href = u
                aLink.setAttribute('download', fileName)
                document.body.appendChild(aLink)
                aLink.click()
                document.body.removeChild(aLink)
                window.URL.revokeObjectURL(u)
            }
        }).catch(error=> {
            _this.$message({
                type:'error',
                showClose:true,
                duration:3000,
                message:'请求失败! error:'+error
            });
        });
    }
  3. 后台Java代码
    import org.springframework.core.io.ClassPathResource;
    import org.springframework.http.ResponseEntity;
    import org.springframework.http.HttpHeaders;
    import org.springframework.http.HttpStatus;
    /**
     * 单位客户Excel文件模板下载
     * 获取模板文件的字节流,返回到前端页面,前端页面对字节流进行封装处理并执行下载操作
     * @param time 时间戳
     * @return blob
     * @throws IOException
     */
    @RequestMapping(value="/download/{time}",method={RequestMethod.POST})
    public @ResponseBody ResponseEntity<byte[]> download(@PathVariable("time")String time) throws IOException {
       // 注此处必须使用 ClassPathResource工具类获取文件,避免在打包为jar文件部署时,找不到文件路径的问题
       ClassPathResource resource = new ClassPathResource("file/temp.xlsx");
       String fileName = "temp_"+time;
       ResponseEntity<byte[]> responseEntity = buildResponseEntity(resource.getInputStream(), fileName);
       return responseEntity;
    }
    
    /**
     * 文件下载
     * @param inputStream 传入文件流
     * @param fileName 文件名
     * @return 文件字节数据
     * @throws IOException
     */
    private ResponseEntity<byte[]> buildResponseEntity(InputStream inputStream, String fileName) throws IOException {
        //获取文件流
        byte[] body = new byte[inputStream.available()];
        inputStream.read(body);
        HttpHeaders headers = new HttpHeaders();
        //设置文件类型
        headers.add("Content-Disposition", "attchement;filename=" + fileName);
        //设置Http状态码
        HttpStatus statusCode = HttpStatus.OK;
        //返回数据
        ResponseEntity<byte[]> entity = new ResponseEntity<byte[]>(body, headers, statusCode);
        return entity;
    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

流沙QS

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

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

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

打赏作者

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

抵扣说明:

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

余额充值