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

从后端获取文件数据并导出

导出文件的公共方法

export const download = (res, tools) => {const { message, hide } = tools;const fileReader: any = new FileReader();console.log('fileReader-res>>>', res);fileReader.onload = (e) => {if (res?.data?.type === 'application/json') {try {const jsonData = JSON.parse(fileReader.result);if (jsonData?.success === false && jsonData?.message) {hide?.();message.error(jsonData?.message);}} catch (error) {hide?.();message.error(getLocalTextFun('common.export.error'));}} else {try {const filename = (res.response.headers.get('content-disposition').split('filename=')?.[1] || '').replace(/"/g, '');if ('msSaveOrOpenBlob' in navigator) {window.navigator.msSaveOrOpenBlob(res.data, decodeURI(filename));} else {const blob = new Blob([res.data]);const url = window.URL.createObjectURL(blob);const link: any = document.createElement('a');link.href = url;link.download = decodeURI(filename);link.click();hide?.();window.URL.revokeObjectURL(url);}} catch (err: any) {hide?.();message.error(getLocalTextFun('common.export.error'));}}};try {fileReader.readAsText(res.data);} catch (e) {hide?.();message.error(getLocalTextFun('common.export.error'));}
};

请求后端接口

const hide = message.loading(`加载中...`, 0);
const res = await exportI18nByLocal(record.locale);
download(res, {message, hide});

接口请求

export async function executeAndTryCatch(func: any) {try {return await func();} catch (error: any) {return error;}
}
export function exportI18nByLocal(locale:string) {return executeAndTryCatch(() =>request<Record<string, any>>(`${api().i18nExport}?locale=${locale}`, {method: 'GET',responseType: 'blob',//'Accept': 'application/vnd.ms-excel', 导出文件是excelheaders: {'Accept': 'application/vnd.ms-excel',"locale": locale},//  获取返回数据结构里面包含response数据 如下图getResponse: true,}).then((res: any) => judgeErrorByResponseType(res)),);
}

接口返回结果
在这里插入图片描述

判断文件是否导出失败

function judgeErrorByResponseType(response: any) {const res = response.response;return new Promise((resolve, reject) => {if (!res) resolve('');if (res.headers.get('Content-Type').includes('json')) {const reader = new FileReader();reader.onload = () => {const { result }: any = reader;const errorInfos = JSON.parse(result);resolve(errorInfos);};reader.onerror = (err) => {reject(err);};reader.readAsText(response.data);} else {resolve(response);}});
}

相关文章:

  • 应急响应靶机训练-Web3题解
  • 【Frida】10_用鼠标自动标记棋盘上的雷区(一键过关)
  • C/C++炸弹人游戏
  • spring cloud gateway k8s优雅启停
  • (C语言)球球大作战
  • 十、C#基数排序算法
  • 实时数仓之实时数仓架构(Doris)
  • Svg Flow Editor 原生svg流程图编辑器(三)
  • Java安全 反序列化(4) CC1链-LazyMap版
  • LLM - 大语言模型的分布式训练 概述
  • 如何关闭路由器的5G Wi-Fi
  • 【呼市经开区建设服务项目水、电能耗监测 数采案例】
  • C语言:自定义类型:结构体
  • Autosar的前世今生:E2E通信校验
  • elementUI(Vue2)和elementPlus(Vue3)图标icon差异
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 【刷算法】求1+2+3+...+n
  • Android组件 - 收藏集 - 掘金
  • Angularjs之国际化
  • CSS魔法堂:Absolute Positioning就这个样
  • egg(89)--egg之redis的发布和订阅
  • Javascript 原型链
  • JS专题之继承
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP的Ev教程三(Periodic watcher)
  • Python 反序列化安全问题(二)
  • 汉诺塔算法
  • 记一次删除Git记录中的大文件的过程
  • 将 Measurements 和 Units 应用到物理学
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 如何在GitHub上创建个人博客
  • 微信支付JSAPI,实测!终极方案
  • 怎么把视频里的音乐提取出来
  • hi-nginx-1.3.4编译安装
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • $分析了六十多年间100万字的政府工作报告,我看到了这样的变迁
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (JS基础)String 类型
  • (翻译)terry crowley: 写给程序员
  • (论文阅读30/100)Convolutional Pose Machines
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (图)IntelliTrace Tools 跟踪云端程序
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (自适应手机端)响应式新闻博客知识类pbootcms网站模板 自媒体运营博客网站源码下载
  • .[hudsonL@cock.li].mkp勒索加密数据库完美恢复---惜分飞
  • .bat批处理(五):遍历指定目录下资源文件并更新
  • .form文件_一篇文章学会文件上传
  • .Net Web项目创建比较不错的参考文章
  • .NET 依赖注入和配置系统
  • .NET/C# 的字符串暂存池
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .NET关于 跳过SSL中遇到的问题
  • /usr/local/nginx/logs/nginx.pid failed (2: No such file or directory)