位置: 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 本地引入)

  • iphone如何清理存储空间(如何清理苹果手机存储)

    iphone如何清理存储空间(如何清理苹果手机存储)

  • 钉钉视频会议怎么看其他人画面(钉钉视频会议怎么静音)

    钉钉视频会议怎么看其他人画面(钉钉视频会议怎么静音)

  • 支付宝怎么查英语四六级成绩(支付宝怎么查英文疫苗接种记录)

    支付宝怎么查英语四六级成绩(支付宝怎么查英文疫苗接种记录)

  • 电子社保卡怎么激活和使用(电子社保卡怎么解绑)

    电子社保卡怎么激活和使用(电子社保卡怎么解绑)

  • 淘宝直播中怎么往前看(淘宝直播中怎么看回播)

    淘宝直播中怎么往前看(淘宝直播中怎么看回播)

  • xbox无法登录账户(xboxones无法登陆账户)

    xbox无法登录账户(xboxones无法登陆账户)

  • zxhn f650是千兆无线吗

    zxhn f650是千兆无线吗

  • 话费透支是欠费了吗(话费透支有什么坏处吗)

    话费透支是欠费了吗(话费透支有什么坏处吗)

  • 热点和wifi有什么区别(热点和wifi一样吗)

    热点和wifi有什么区别(热点和wifi一样吗)

  • 苹果手机浅色深色切换不了(苹果手机浅色深色哪个省电)

    苹果手机浅色深色切换不了(苹果手机浅色深色哪个省电)

  • 小米10青春版可以用4g卡吗(小米10青春版可以扩展内存吗)

    小米10青春版可以用4g卡吗(小米10青春版可以扩展内存吗)

  • 手机屏幕出现彩色条纹怎么自修(手机屏幕出现彩色竖线还能用多久)

    手机屏幕出现彩色条纹怎么自修(手机屏幕出现彩色竖线还能用多久)

  • 微信有个1但是没有未读消息(微信发现上面有个1是啥意思)

    微信有个1但是没有未读消息(微信发现上面有个1是啥意思)

  • 腾讯视频有没有vr功能(腾讯视频有没有定时关闭功能)

    腾讯视频有没有vr功能(腾讯视频有没有定时关闭功能)

  • 数据处理发展的三个阶段(数据处理发展方向)

    数据处理发展的三个阶段(数据处理发展方向)

  • 苹果x双4g什么意思(iphone xr 双4g)

    苹果x双4g什么意思(iphone xr 双4g)

  • 手机键盘声音怎么开(手机键盘声音怎么关掉华为)

    手机键盘声音怎么开(手机键盘声音怎么关掉华为)

  • 抖音抢镜那个框怎么放大(抖音的抢镜)

    抖音抢镜那个框怎么放大(抖音的抢镜)

  • 荣耀20指纹解锁在哪里(荣耀20指纹解锁设置)

    荣耀20指纹解锁在哪里(荣耀20指纹解锁设置)

  • 快手极速版可以发作品吗(快手极速版可以扫码登录吗)

    快手极速版可以发作品吗(快手极速版可以扫码登录吗)

  • Anconda虚拟环境创建及pytorch的安装步骤(anconda虚拟环境路径)

    Anconda虚拟环境创建及pytorch的安装步骤(anconda虚拟环境路径)

  • 番外篇 | 20+ 种注意力机制及代码 适用于YOLOv5/v7/v8(新增5种v7模板)(喰种小说在线阅读)

    番外篇 | 20+ 种注意力机制及代码 适用于YOLOv5/v7/v8(新增5种v7模板)(喰种小说在线阅读)

  • python九宫格图片的原理(python简单九宫格拼图游戏)

    python九宫格图片的原理(python简单九宫格拼图游戏)

  • 电子缴税付款凭证怎么做账
  • 上下班出了事故算不算工伤
  • 补充登记法怎么写
  • 没有发票可以先报销吗
  • 处置长投时其他权益变动
  • 企业名称变更需要重新核名吗
  • 固定资产核算的心得体会
  • 增值税发票验证
  • 本月计提所得税费用
  • 材料验收入库并结转差异记账凭证
  • 借款可以转注资款吗
  • 委托、受托出口做账有哪些事项?
  • 有关税收的征收管理规定介绍
  • 认证后的发票可以留存多久
  • 2018年出口退税税率
  • 开物流公司能挣多少钱
  • 问福利费的发票如果是增值税专用发票,增值税可以抵扣吗?
  • 利润分配可以用现金吗
  • 服装外贸进出口
  • 建筑业分包抵扣
  • 结算会计和往来账的区别
  • 应交税费有余额怎么结转
  • 补提以前年度费用在年度报表中怎么填
  • 税控盘的抵扣怎么填
  • 电子普票开具的最新文件
  • 小规模零申报资产负债表报错了要交印花税吗
  • 公司作为二房东怎么给别人开发票
  • 电动汽车的出路在哪里
  • 进口关税和增值税在哪里交
  • 运输公司租赁车辆怎么做账
  • 电脑有些进程关不掉
  • 销项负数发票应该给谁
  • 主营业务利润率多少合适
  • 外汇业务的核算ppt
  • php使用oci8扩展连接oracle
  • 企业之间拆借资金
  • 厂区绿化工程计入什么科目
  • 劳务费还没发可以先计提吗
  • php获取get
  • php mysql_real_escape_string addslashes及mysql绑定参数防SQL注入攻击
  • php用echo输出图片
  • js map()
  • 公链dapp
  • php 正则表达式教程
  • 软件增值税即征即退网上备案
  • 财政零余额账户存款
  • python提供的3个基本数字类型
  • 如何设置linux
  • python方差齐性检验
  • sqlserver服务请求失败或服务未及时响应
  • 如何计提固定资产折旧费
  • 进项税额转出再转入
  • 子公司与母公司承担连带责任
  • 发放外单位人员劳务费需要在发放表上签字吗
  • 收到其他企业投资是属于其他业务收入吗
  • 其他应收款贷方余额怎么调整
  • 电子缴税付款凭证是什么结算方式
  • 原材料结转下年怎么记
  • 电信电子发票什么格式
  • 款项已支付是什么科目?
  • mysql 内存模型
  • adb.exe是什么程序
  • 远程桌面连接xp系统
  • linux允许ping
  • linux ftp搭建教程
  • debian怎么用
  • linux 源文件
  • win 10系统怎么查看网络连接
  • bootstrap表格内容模板
  • python 入门
  • android图片透明度怎么设置
  • 批处理改ipv4地址
  • 初步认识的思维导图
  • javascript文字特效
  • listview属性设置
  • js如何使用
  • 进项发票认证了怎么冲红
  • 雅阁交强险和车船税多少
  • 湖南电子税务局密码错误5次
  • 纪律作风如何形容
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设