当前位置: 首页 > news >正文

SpringBoot+Hutool+Vue实现导出

1.后端代码

    //权限管理部分注解@RequiresPermissions("admin:goods:InventoryExport")@RequiresPermissionsDesc(menu = {"商品管理", "商品管理"}, button = "库存导出")@GetMapping("/inventoryExport")public void export(HttpServletResponse response, Integer goodsId, String goodsSn, String name, Integer catId) throws IOException {//查询数据List<Goods> export = adminGoodsService.export(goodsId, goodsSn, name, catId);ExcelWriter excelWriter = ExcelUtil.getWriter(true);excelWriter.addHeaderAlias("id", "商品id");
//将数据模型中的username字段映射为Excel表格中的用户名列。excelWriter.addHeaderAlias("productId", "库存id");excelWriter.addHeaderAlias("name", "商品名称");excelWriter.addHeaderAlias("name", "商品名称");excelWriter.setOnlyAlias(true);excelWriter.write(export, true);String fileName = URLEncoder.encode("库存导出.xlsx", "UTF-8");try {response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");ServletOutputStream outputStream = response.getOutputStream();excelWriter.flush(outputStream, true);outputStream.close();excelWriter.close();} catch (IOException e) {e.printStackTrace();}}

2.前端代码

handleDownload() {this.downloadLoading = true//请求后端接口InventoryExport().then(response => {//临时创建一个a标签然后点击进行下载const url = window.URL.createObjectURL(new Blob([response.data]));const link = document.createElement('a');link.href = url;link.setAttribute('download', '库存导出.xlsx');document.body.appendChild(link);link.click();document.body.removeChild(link);this.downloadLoading = false}).catch(response => {this.$notify.error({title: '失败',message: response.data.errmsg})})
}//request封装代码
export function InventoryExport(query) {return request({url: '/goods/inventoryExport',method: 'get',params: query,responseType: 'blob',})
}

3.注意点

刚开始前端代码请求到后端接口后老是只走catch不走then

经过原因排查之后是因为前端请求拦截器的原因,接口没有返回自定义状态码就会走catch,

但是导出接口返回的是blob数据没有状态码,所以需要在拦截器中加入以下代码:

service.interceptors.response.use(response => {//文件流不检测自定义状态码if(response.config.responseType==="arraybuffer" || response.config.responseType==="blob" || response.data instanceof Blob) {return response; // 文件流}const res = response.dataif (res.errno === 501) {MessageBox.alert('系统未登录,请重新登录', '错误', {confirmButtonText: '确定',type: 'error'}).then(() => {store.dispatch('FedLogOut').then(() => {location.reload()})})return Promise.reject('error')} else if (res.errno === 502) {...}
})

http://www.dtcms.com/a/469414.html

相关文章:

  • 中山建设厅网站首页山东济南网站推广
  • ⸢ 柒-Ⅲ⸥⤳ 可信纵深防御建设方案:数据使用可信端安全可信
  • PHP多维数组按指定字段排序usort自定义排序方法(或使用太空船操作符 <=> 进行比较,默认按升序排序)
  • Ubuntu 20.04 安装 Redis
  • etcd节点噶了导致的k8s集群瘫痪处理参考——筑梦之路
  • stm32底层项目20251011
  • http://localhost:7474/browser/ 登陆之后账号密码neo4j / neo4j 不对 页面出现以下:
  • 网站后台添加不了图片2008r2做网站
  • 学工网站建设博物馆网站建设说明
  • RabbitMQ概述,Rabbitmq是什么
  • C 语言12:字符串函数全解析
  • 国家城乡建设规划部网站邢台专业网站建设价格
  • 三层架构:解耦 JavaWeb 开发的核心范式
  • MySQL————表的约束
  • 速度达24.3MB/s,最新精简可用版!
  • 分业务采用差异化模式:全面提升 SQL Server 系统的并发性能、可靠性与数据准确性
  • 【Linux】应用层自定义协议与序列化
  • 文件上传漏洞: .htaccess文件
  • 【GD32】软件I2C
  • 温州产品推广网站服务网站建设方案
  • 08-docker综合应用
  • 电商网站建设与运营哦在线图片编辑助手
  • 十一款c++小游戏
  • 15-verilog的延时打拍问题记录
  • skynet.newservice接口分析
  • C# 中 Excel 工作表打印前页面边距的设置方法
  • uniapp学习【vue3在uniapp中语法,使用element】
  • 网站建设的基本流程和技术规范懒人免费建站模板
  • Linux的Ext文件系统:硬盘理解和inode及软硬链接
  • 可靠的媒体发稿网有哪些