最开始做下载功能的时候,是模仿项目中已有的写法来实现的,这套模板应该可以适应大多数的下载,网上很多也是这种写法:

.then(res => {// res 为调用后端下载接口返回的值const blob = new Blob([res]);// 注意:文件类型不可少!当然也可以是其他类型比如 pdf,这取决于具体的文件。const fileName = 'xxx.png';     const elink = document.createElement("a");elink.download = fileName;elink.style.display = "none";elink.href = URL.createObjectURL(blob);document.body.appendChild(elink);elink.click();URL.revokeObjectURL(elink.href);document.body.removeChild(elink);
})

所以呢,就只管照着用了,直到搬到另一个项目的时候,发现出了问题,文件能正常下载,但是无法打开。比如下载 pdf 显示 “不支持打开该类型文件或文件已损坏”,下载图片则是无法查看。

怎么会呢,同样的写法,放到一个项目中可行,另一个项目就不行了?

查了半天资料,也没查出个所以然,直到我打印了 res,并且对比了两个项目中的 res,我才发现了原因,原因就出在返回结果 res

A项目中可以直接使用res,是因为在 axios 中对后端的响应做了拦截,所以new Blob([res])中拿到的res实际上是后端接口的res.data,只不过这一层操作在全局被封装了。

但是 B 项目直接使用的$http.get().then(),并未在全局对请求进行封装拦截。所以在这里需要取得的是res.data

于是,我把new Blob([res])改成new Blob([res.data])后,问题就解决了。


以上便是关于这个问题的解决方案,特此记录一下,希望有帮到碰到同样问题的你。

如有错误之处,还望及时指正!

前端下载 “不支持打开该类型文件或文件已损坏“问题相关推荐

  1. H5 下载word文件时预览失败,提示无法预览此文件,它可能已损坏,有部分可可以查看预览

    移动端H5下载文件功能时,发现部分word文件可以在线打开 有些无法打开,提示"无法预览此文件,它可能已损坏": 但是在Pc端下载是可以正常打开的,移动端是不行. 代码如下: by ...

  2. 安装MySQL提示cab文件损坏_安装所需的 CAB 文件“Redist.cab”已损坏处理办法

    近日为客户调试sql server 2008时意外的然出现两个报错,结果导致部分功能组件无法安装成功 如下 产品: Microsoft SQL Server 2008 联机丛书(简体中文) -- 错误 ...

  3. 使用FileOutPutStream下载docx文件报文件已损坏解决

    代码发布到linux之后,通过接口下载了文件,打开文件提示文件已损坏,但是强行打开却是可以看到内容的,很奇怪. 在网上也找了好多办法,没能解决,最终是在响应头里加入一个Length之后,下载文件打开不 ...

  4. MATLAB读取结构体mat文件报错已损坏

    遇到一个挺奇怪的事情,用MATLAB R2021a保存下来的.mat文件,里面是一个结构体:结果在MATLAB R2018b中load这个mat文件,提示"无法读取,改文件可能已损坏&quo ...

  5. 文件流下载文件后提示不支持打开该类型文件或文件已损坏

    在react项目中用到下载,请求后端接口返回文件流,前端来处理文件流生成文件后下载. 要设置responseType!! 采用的方法就是百度上随便一搜就可以搜到的Blob方法,最开始要下载的文件格式为 ...

  6. 前端下载图片、pdf、excel、world文件;前端下载图片和pdf文件;前端a标签下载图片和pdf文件;下载文件名称不生效原因。

    参考文章1 参考文章2 以下的下载是,拿到了后端给的下载图片的接口地址url > 方法1:将文本或者JS字符串通过 Blob 转换成二进制下载 优点:可以下载,也可以保存名称. //文件流参数和 ...

  7. Vmware 15 Pro 报错 安装所需的CAB文件“Workstation.cab”已损坏,无法使用

    出现这个错误是你下载的安装包有问题,重新下就可以了! 如果你需要安装包: https://pan.baidu.com/s/1gR_iJzFZCetM2y3FuAZ2mQ 如果你需要破解码: https ...

  8. 因路径乱码使InstallShield Wizard安装包打开“出现1155错误,文件xxx.msi未找到“的解决方式

    安装学校大物实验软件,该软件使用InstallShield打包,但我将安装包下载下来后打开无法正常运行.明明也已按教学视频所说安装了.Net Framework 3.5,还是出现错误. 我遇到的错误如 ...

  9. Mac打开第三方下载的软件提示已损坏的解决方法

    mac打开第三方下载的软件时提示以下内容:"XXX"已损坏,打不开,您应该将它已到废纸篓. 出现这个问题的原因是新版本的macos的安全机制默认不允许用户安装非App Store下 ...

最新文章

  1. RHEL 5搭建Samba服务器详细过程
  2. std::unique_lock与std::lock_guard区别示例
  3. C++静态成员和静态成员函数
  4. go 判断channel是否关闭
  5. mysql binlog解析 c_解析MYSQL BINLOG二进制格式(9)--infobin解析binlog帮助文档
  6. 批量生产insert 或者update语句
  7. ubuntu16.04 安装python3.6
  8. 5条线程轮流打印1~100
  9. stm32采集交流电压信号_基于STM32的多路电压采集的设计与实现
  10. wechat微信模板消息推送demo
  11. U3D里UI相关逻辑和文件的组织关系的各种形式的比较
  12. 【软件工程】软件维护
  13. Mutation Observer API
  14. 2023最新高频前端面试题总结(附答案)
  15. 动态规划求解多段图问题
  16. 微信小程序自定义组件中获取app实例的值,生命周期与页面的生命周期执行先后顺序
  17. web前端:简单的海报设计(简单的插入静态图为背景)
  18. 三维实景建模及倾斜摄影建模解决方案,附应用案例
  19. ajax json 根据邮政编码查地址
  20. 单模单纤FC接口光纤传输距离

热门文章

  1. 基于CodeMirrorTernJS的汉语Javascript编辑器(和翻译器)
  2. win10 音频设备图形隔离 占用CPU
  3. Linux 定时任务shell脚本定时移动服务器日志文件到指定目录下
  4. Spring注解之@GetMapping详解
  5. Django案例:显示图书的信息books
  6. 【To Be Continued】一些有意思的计算机小问题
  7. Oracle ORA-01460报错解决方法
  8. ROS学习系列(一):ubuntu16.04下安装 ROS IDE RoboWare Studio 教程
  9. 京东数科前端岗位面历
  10. 使用latex导出IEEE文献格式