文件下载时浏览器遇到txt,jpg,png,pdf,mp4等文件会直接预览而不是直接下载。

踩坑1  window.open()

Window 接口的 open() 方法,是用指定的名称将指定的资源加载到浏览器上下文(窗口 window ,内嵌框架 iframe 或者标签 tab )。如果没有指定名称,则一个新的窗口会被打开并且指定的资源会被加载进这个窗口的浏览器上下文中。

// 后端返回的是下载链接
window.open(url);

这个方法只能将指定路径的资源加载到浏览器里,如果该文件不能被浏览器预览,浏览器就会下载该文件,但是,如果浏览器可以预览该文件呢?是不是这个方法不可以实现?这是我下载文本txt的时候踩的坑,用该方法浏览器会直接预览该txt文件。

踩坑2 window.location.href和html的a标签下载

// html a标签下载
const link = document.createElement('a')link.href = response.data.link // 后端返回的文件下载链接link.click()// window.location.href
window.location.href = response.data.link //后端返回的下载链接

服务端在头部(headers)加字段 Content-Disposition

这个方案是后端去做的,具体可以怎么修改可以问一下后端

解决方案有两种

方案1 downloadjs 插件进行下载

npm地址:downloadjs - npm

// 安装
npm install downloadjs -S// 导入
import download from "downloadjs"// 使用
download(url, strFileName, strMimeType);download第一个参数为URL,第二个参数为文件名称,第三个参数文件类型,url必填,另外两个选填

优点:可以下载不会出现预览情况

缺点:1. 下载的文件打不开,大小也对不上。 2. 不能自定义名称 (在URL进行转码后虽然可以下载文件,但名称却是转码后的名称,而不是原本的名称,这时我们用第二个参数进行命名时,名称是对了,可文件却出现打不开,大小不对的情况)

方案2 file-saver

github地址:https://github.com/eligrey/FileSaver.js

// 安装
npm i file-saver
or
yarn add file-saver
// 导入
import { saveAs as FileSaver } from 'file-saver'
// 使用
// 在方法内使用该代码片段
const oReq = new XMLHttpRequest()
const URL= '' // URL 为下载的URL地址
oReq.open('GET', URL, true)
oReq.responseType = 'blob'
oReq.onload = function() {const file = new Blob([oReq.response], {type: 'blob'})FileSaver.saveAs(file, fileName) // fileName为文件名
}
oReq.send()

记录:

触发浏览器预览的文件后缀有哪些呢(我也给总结一下)

['jpg', 'txt', 'png', 'pdf', 'jpeg', 'gif', 'html', 'art', 'au', 'aiff', 'xbm', 'swf', 'ext2', 'ext3', 'ascii', 'mime', 'wmv', 'asf', 'asx', 'rmvb', 'rm', 'mp4', '3gp', 'mov', 'm4v', 'avi', 'dat', 'mkv', 'flv', 'vob', 'wave', 'audio', 'mpeg', 'realaudio', 'tiff', 'raw', 'bmp', 'exe', 'sys', 'com']

结语

人生不易,永远也不该演戏作假。

VUE实现下载文件,避免浏览器默认直接打开文件相关推荐

  1. java获取默认下载路径吗_java下载文件到浏览器默认路径

    java下载文件到浏览器默认路径 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog..net/mengmeng2222222 一.controller层代码: @Requ ...

  2. 使用a标签下载文件,浏览器会直接打开解决方案

    使用a标签下载文件,浏览器会直接打开解决方案 背景 一.HTML中的a标签实现点击下载 二.即使使用a标签的download属性,chrome浏览器还是会打开 三.解决方案 解决方案一:使用ajax请 ...

  3. 在Qt中用默认程序打开文件

    用法:    QProcess::execute("explorer 文件名"); 例:        QProcess::execute("explorer c:\\1 ...

  4. qt 无法打开shell32_在Qt中用默认程序打开文件

    用法:    QProcess::execute("explorer 文件名"); 例:        QProcess::execute("explorer c:\\1 ...

  5. win10浏览器另存为,打开文件等打开资源管理器卡死解决

    win10浏览器另存为,打开文件等打开资源管理器卡死解决 第一步: 控制面版 打开资源管理器时打开--选择此电脑 应用确定 第二步 打开设置->个性化->颜色->从我的主题里选一个颜 ...

  6. Excel VBA选择文件、高容错性地打开文件

    VBA选择文件 Sub SelectFile() Dim FileName As Variant '打开文件对话框返回的文件名,是一个全路径文件名,其值也可能是False,因此类型为Variant D ...

  7. word无法读取此文档,文档可能已损坏 请尝试下列方法:*打开并修复文件*用文本恢复转换器打开文件

    若对您有所启发 欢迎打赏 古典小说网 致力于打造极致阅读体验 首创卡拉OK读书方式 首创,桌面大屏幕TXT阅读方式 今天遇到这个问题,word刚刚关闭,然后就打不开了 出现上面提示 解决方法: 先打开 ...

  8. 服务器文件夹取消只读,服务器上的excle文件有人打开文件编辑后关闭文件,别人再去打开文件时“**”正在编辑,用只读方式打开!excel怎样解除只读...

    在office2007 word excle PPT 中怎么设置权限为:禁止复制,禁止打印,禁止修改,仅只读功能呢?! 在工具----选项----安全性,根据你的要求设置相关密码即可! excel怎么 ...

  9. TP超链接无法下载问题解决 hrome浏览器默认禁止iframe嵌套页面下载文件

    var urlshow="{:U('Grant/download')}&grt_id="+row['grt_id']; let link = document.create ...

最新文章

  1. U3D架构系列之- FSM有限状态机设计五
  2. 基于Python操作ElasticSearch
  3. python web为什么不火-Python语言为什么这么火?老男孩Python入门培训
  4. 系统文件打开检测脚本
  5. linux 关于减号 - 代替stdin 和stdout 的用法
  6. 别让扁平化设计平淡无奇
  7. Maven的简单配置说明
  8. Linux 字符设备驱动开发基础(四)—— ioctl() 函数解析
  9. gtj2018如何生成工程量报表_土建软件GTJ2018中的十个问题及解决方法
  10. Restricted Boltzmann Machine (RBM)限制波尔兹曼机
  11. iOS数据库操作(使用FMDB)
  12. 付费圈子来了,去还是不去?
  13. 读取四则运算的字符串(Formula)返回计算结果 c#
  14. LICEcap:GIF屏幕录制工具
  15. emplace_back不能取代push_back的情况
  16. 国家信息安全等级考试NISP一级题库(1)第1至100题
  17. 计算机连接无线网络的步骤,笔记本怎么连接wifi超详细教程
  18. 集群、分布式、负载均衡区别(转)
  19. pancakeswap 前端源码编译及部署-linux
  20. 我的英文写作学习之旅:100日入门+后期靠积累

热门文章

  1. python基础“猜单词游戏”代码
  2. 数据库插入数据报错Unknown error finalizing or resetting statement (19: UNIQUE constraint failed:xxx.xxx)
  3. php小数点后保留一位或两位小数
  4. xPC信号采集和分析(1)
  5. Zbrush一些基本操作
  6. 全球及中国生物敷料市场竞争态势与投资风险分析报告2022年
  7. Slax本地化:U盘上的Linux中文套件
  8. 大规模太空资源开采,在未来十年将成为现实
  9. 手动搭建Hadoop环境
  10. 脱星摘帽刺激 ST板块表现出众