VUE+JAVA实现EXCEL模板下载

一、项目场景:

VUE+JAVA实现EXCEL模板下载

二、代码实现

该项目使用JAVA编写后台,VUE编写前台。

2.1后台JAVA

注: response.setHeader(“content-type”, “application/vnd.ms-excel”);
response.setHeader(“Content-Length”,String.valueOf(bs.available()));
这两个属性必须设置,否则会有意想不到的错误出现!!

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
@Service
public class TestCaseService {
    private static final Logger LOGGER = LoggerFactory.getLogger(TestCaseService.class);
    private static final String EXCEL_TEMPLATE_PATH = "template/template.xlsx";
    /*
     * * @Description 模板下载功能
     * @Date 下午 17:16:37 2022-4-19
     * @Param [response]
     * @return void
     **/
   public void exportTemplate(HttpServletResponse response) throws IOException {
       InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(EXCEL_TEMPLATE_PATH);
       BufferedInputStream bs = new BufferedInputStream(inputStream);
       ServletOutputStream out = null;
       byte[] data = new byte[1024];
       try {  
           String fileName = URLEncoder.encode("template.xlsx", "UTF-8");
           response.setCharacterEncoding("UTF-8");
           response.setHeader("content-type", "application/vnd.ms-excel");
           response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
           response.setHeader("Content-Length",String.valueOf(bs.available()));
           out = response.getOutputStream();
           int len = 0;
           //以下两种方式均可
           while((len = bs.read(data)) >0){
               out.write(data, 0, len);
           }
           //while((len = bs.read(data)) !=-1){
           //   out.write(data, 0, len);
           //}
           out.flush();
           out.close();
       } catch (Exception ex) {
           LOGGER.error("下载excel模板失败", ex);
       }
   }
}

2.2前台VUE

2.2.1. 下载按钮:

 <el-button type="primary" @click="exportTemplate()">下载模板</el-button>

2.2.2.下载方法:

注:{ type: ‘application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’ },该类型代表是xlsx

 exportTemplate() {
      testcase.exportTemplate().then(response => {
        // 通过 a 标签创建一个虚拟链接下载文件
        var blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }) // application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 这里表示xlsx类型
        const a = document.createElement('a')
        a.download = '模板文件'//可以自定义,也可以hearder里面截取
        a.style.display = 'none'
        a.href = URL.createObjectURL(blob)
        document.body.appendChild(a)
        a.click()
        URL.revokeObjectURL(a.href) // 释放URL 对象
        document.body.removeChild(a)
      }).catch(err => {
        console.log(err.response.data.message)
      })
    }

2.2.3. 前台调用的接口

注:因公司框架已经封装好了axios的请求,所以下图代码为使用封装好的组件进行调用,如果需要,可自行网上搜索VUE调用后台接口方法
responseType:'blob’这个熟悉一定要配置,否则前台控制台一片红

  exportTemplate() {
    return request({
      url: '/testcase/exportTemplate',
      method: 'post',
      responseType: 'blob'
    })
  },
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值