位置: IT常识 - 正文

Vue实现下载文件而非浏览器直接打开(vue中下载文件)

编辑:rootadmin
Vue实现下载文件而非浏览器直接打开 问题背景

推荐整理分享Vue实现下载文件而非浏览器直接打开(vue中下载文件),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:vue下载文件到指定路径,vue实现下载文件进度条,vue实现下载文件进度条,vue 实现文件下载,vue下载文件到指定路径,vue实现下载文件进度条,vue实现下载文件IE浏览器会把路径弄进去嘛,vue实现下载文件到本地,内容如对您有帮助,希望把文章链接给更多的朋友!

对于一个txt文本、图片、视频、音频等浏览器可以直接使用浏览器进行预览的文件, 使用传统的a标签加download属性进行下载是行不通的,会在浏览器直接打开,因此需要搞一个新的方式进行下载。

实现流程实现思路

这里使用Vue自定义指令,对文件链接进行处理,将链接转化为blob进行下载,Vue2和Vue3在写法上有所区别。

定义指令

在src目录中,新建存放所有自定义指令的目录directive,然后新建vdown.js并编写指令:

Vue2写法:import Vue from "vue";Vue.directive('down', { inserted: (el, binding) => { el.addEventListener('click', () => { let link = document.createElement('a') let url = binding.value // 这里是将url转成blob地址, fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址 link.href = URL.createObjectURL(blob) console.log(link.href) link.download = '' document.body.appendChild(link) link.click() }) }) }})Vue3写法:let vdown = { mounted: (el, binding) => { el.addEventListener('click', () => { console.log(binding.value) let link = document.createElement('a') let url = binding.value // 这里是将url转成blob地址, console.log(url) fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址 link.href = URL.createObjectURL(blob) console.log(link.href) link.download = '' document.body.appendChild(link) link.click() }) }) }}export default vdownVue实现下载文件而非浏览器直接打开(vue中下载文件)

指令中使用fetch获取文件内容,并转换为blob,然后通过构造的A标签模拟点击进行下载。

注册指令

在Vue2写法中,已经使用Vue.directive注册了指令,所以直接在main中引入自定义指令的脚本文件即可:

...import '@/directive/vdonw'...

而在Vue3写法中,定义指令的脚本中只是定义了指令的内容而未注册,所以需要在main中进行注册:

Vue3写法:import { createApp } from 'vue'import App from './App.vue'var app = createApp(App)// 注册指令import vdown from '@/directive/vdown'app.directive('down', vdown)// 注册结束app.mount('#app')使用指令

在Vue文件中,直接定义下载按钮,添加v-down指令并传递要下载的URL,即可完成下载:

...<a v-down="'http://127.0.0.1:8888/file.txt'">下载文件</a>...跨域问题

若遇到跨域问题,配置proxy代理解决即可,在vue.config.js中添加如下内容:

module.exports = { devServer: { proxy: { '/serverfile': { target: 'http://www.xxx.com',//这里后台的地址模拟的;应该填写你们真实的后台接口 ws: true, changOrigin: true,//允许跨域 pathRewrite: { '^/serverfile': '/'//请求的时候使用这个api就可以 } } } }}

修改下载按钮中的连接:

...<a v-down="'/serverfile/file.txt'">下载文件</a>...

然后点击下载即可成功下载:

本文链接地址:https://www.jiuchutong.com/zhishi/290843.html 转载请保留说明!

上一篇:四川成都熊猫基地的小熊猫 (© Biosphoto/Alamy)(四川成都熊猫基地介绍)

下一篇:vue3.0本地引入vue.js(vue.min.js 本地引入)

  • 怎么在手机上开通快捷支付功能(怎么在手机上开通手机银行)

    怎么在手机上开通快捷支付功能(怎么在手机上开通手机银行)

  • 小米手表color2支持nfc吗(小米手表Color2支持匹配苹果手机吗)

    小米手表color2支持nfc吗(小米手表Color2支持匹配苹果手机吗)

  • 苹果13promax怎么设置轻点唤醒(苹果13promax怎么设置动态壁纸)

    苹果13promax怎么设置轻点唤醒(苹果13promax怎么设置动态壁纸)

  • 高德地图可以微信支付吗(高德地图可以微信零钱支付吗)

    高德地图可以微信支付吗(高德地图可以微信零钱支付吗)

  • 会员下载歌曲怎么永久(会员下载歌曲怎么变成永久的)

    会员下载歌曲怎么永久(会员下载歌曲怎么变成永久的)

  • 苹果7p信号弱怎么回事(苹果7p信号弱怎么能变强)

    苹果7p信号弱怎么回事(苹果7p信号弱怎么能变强)

  • 电脑显示器只显示灰色背光(电脑显示器只显示鼠标)

    电脑显示器只显示灰色背光(电脑显示器只显示鼠标)

  • 注销qq后能恢复吗(注销qq能不能恢复)

    注销qq后能恢复吗(注销qq能不能恢复)

  • 魅族17几倍变焦(魅族17pro变焦倍数)

    魅族17几倍变焦(魅族17pro变焦倍数)

  • 腾讯会议在哪里改名字(腾讯会议在哪里打字聊天)

    腾讯会议在哪里改名字(腾讯会议在哪里打字聊天)

  • 为什么手机开机一直处于开机动画(为什么手机开机后连不上wifi)

    为什么手机开机一直处于开机动画(为什么手机开机后连不上wifi)

  • iphone已停用一个小时再试(iphone已停用一个小时,想起密码可以用吗)

    iphone已停用一个小时再试(iphone已停用一个小时,想起密码可以用吗)

  • qq被注销的状态是什么样的(qq被注销了)

    qq被注销的状态是什么样的(qq被注销了)

  • 无法设置双重认证(无法设置双重认证是什么意思)

    无法设置双重认证(无法设置双重认证是什么意思)

  • 淘宝限制下单永久还有救吗(淘宝限制下单永久会有什么影响)

    淘宝限制下单永久还有救吗(淘宝限制下单永久会有什么影响)

  • 微信搜狗输入法怎么设置(微信搜狗输入法定制版正在录音怎么取消)

    微信搜狗输入法怎么设置(微信搜狗输入法定制版正在录音怎么取消)

  • 移动办公软件有哪些(移动办公系统软件)

    移动办公软件有哪些(移动办公系统软件)

  • ps怎么关闭快速蒙版(ps怎么关闭快速选择)

    ps怎么关闭快速蒙版(ps怎么关闭快速选择)

  • 苹果手机怎么连蓝牙耳机(苹果手机怎么连接车载carplay)

    苹果手机怎么连蓝牙耳机(苹果手机怎么连接车载carplay)

  • 手机微博怎么看上线记录(手机微博怎么看悄悄关注)

    手机微博怎么看上线记录(手机微博怎么看悄悄关注)

  • qq音乐购买记录在哪里(qq音乐购买记录删除了)

    qq音乐购买记录在哪里(qq音乐购买记录删除了)

  • airpods无线充电有必要吗(airpods无线充电盒能用线充吗)

    airpods无线充电有必要吗(airpods无线充电盒能用线充吗)

  • 联想小新air15如何升级Win11?联想小新air15安装Win11教程(联想小新Air15如何进入bois)

    联想小新air15如何升级Win11?联想小新air15安装Win11教程(联想小新Air15如何进入bois)

  • DEDECMS不规则的列表实现方法 每隔5行加一虚线(div不规则排版)

    DEDECMS不规则的列表实现方法 每隔5行加一虚线(div不规则排版)

  • 装卸费发票怎么备注
  • 收到税费返还是什么现金流量
  • 服务费发票需要交印花税吗
  • 劳务派遣公司如果倒闭了怎么办
  • 服装企业销售方式
  • 外商独资企业资本金的使用
  • 增值税一般纳税人是什么意思
  • 商贸企业收到的检测费可以抵扣进项税吗
  • 出口退税计算方式
  • 当月工资补扣个税吗
  • 进项发票认证抵扣时间有限制吗
  • 无需支付的款项需要缴税吗
  • 个税是应发工资扣,还是实发工资扣
  • 应交税费重分类分录
  • 琥珀销售用语
  • 新版edge浏览器如何打开ie浏览器
  • vue使用方法
  • Win10 20H2 LSASS.exe自动重启故障已得到修复
  • Remoterm.exe - Remoterm是什么进程 有什么用
  • 交接目录excel
  • 期间损益结转都结转什么
  • 补缴免抵退
  • php plates
  • vue假数据
  • usermod修改密码
  • 二手车征税税率减按多少税
  • 大额的维修费用怎么摊销
  • 主营业务收入未收到钱
  • 3分钟学会做蛋挞
  • 证券公司收益凭证管理办法
  • 合伙企业要不要每月做账?报税是不是与一般的有限公司一样,每月申报纳税吗?
  • 购买的机械设备算固定资产吗
  • 出纳开的收据找不到了怎么办
  • 企业出售自用房产增值税
  • 利润计算公式是什么折扣
  • 接受捐赠如何进项
  • 现汇跟承兑有什么区别
  • 公账转法人私账用途写备用金可以吗
  • 银行的存单丢失了可以补办吗
  • 收到利息的会计凭证
  • 国外差旅费如何确定汇率呢
  • 进项税加计抵减的分录怎么做?
  • 贸易公司的会计要做哪些报表
  • 公司收到现金货款怎么存银行
  • 未开票收入怎么做账
  • 股东如何收回投资款
  • 以前年度发票退回了不重开怎么处理
  • 12月计提的工资没有发完怎么做账
  • 未交增值税增加记哪方
  • 销项发票能不能退税
  • 军工科研事业单位会计制度
  • 其他应收款的核算范围包括
  • 物流货到付款可以吗
  • 房地产项目企业
  • 多个客户账款明细
  • mysql命令导入
  • 最新版手机
  • 哪个是win8.1更新win10的补丁
  • xp系统没有安装好,请重新运行安装程序
  • mac os图片
  • bios设置USB启动英文
  • xmp文件是干嘛用的
  • linuxserver docker
  • linux系统如何进入终端
  • setlang.exe - setlang是什么进程 有什么用
  • windows8怎么设置
  • windows右键菜单
  • 简单模拟电路图
  • 简单的jquery插件实例
  • unity3d碰撞体
  • 运行node.js的应用程序服务器
  • android contextmenu
  • nodejs和jsp
  • jquery的循环
  • android线程状态
  • 增值税普通发票需要交税吗
  • 陕西税务局官网登录
  • 水库占地怎么缴耕地占用税
  • 车船发票什么样子
  • 关于税制的问题
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设