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

  • 微博可以同时登录两个手机吗

  • 小爱同学怎么连接台式电脑(小爱同学怎么连接小米空调)

  • 小米10大概多久能充满电(小米大概多久降价)

  • 微视可以发多少秒的朋友圈呢(微视可以发多少秒视频)

  • 微信解封为什么要刷脸(微信解封为什么显示绑卡信息不一致)

  • 红米note7是什么屏幕

  • 快手小店打不开是怎么回事(快手小店打不开了,无法查订单)

  • 微信etc可开票金额不足(微信etc开票流程)

  • 抖音佣金怎么结算(抖音佣金怎么结算时间)

  • 华为手机碎屏险一年内可以免费换几次(华为手机碎屏险怎么查询)

  • 小米10支持65w吗(小米10支持50w吗)

  • ipad不停的弹出id登录(ipad不停的弹出登录icloud)

  • oppo手机怎么设置插件(oppo手机怎么设置下面三个按键)

  • 苹果11下面的横线怎么去掉(苹果11下面的横线怎么没震动了?)

  • 手机连打印机如何设置(手机怎样连接打印机打印东西?)

  • 苹果x有指纹吗(苹果x有指纹识别吗)

  • 华为P30pro手机怎么样使用u盘(华为p30pro手机怎么样)

  • 手机wps怎么删除空白页面(手机wps怎么删除多余页面文档)

  • PS怎样处理食物照片(ps处理食物图片)

  • a1901支持电信吗(a1906支持电信吗)

  • vivo手机怎么打印文件(vivo手机怎么打开小v)

  • 朋友圈怎么发实况照片(朋友圈怎么发实时位置)

  • Win10任务栏图标点击没反应怎么办? 任务栏图标点击无效的解决办法(win10任务栏图标怎么变大)

  • 基奈峡湾国家公园的尖顶湾,阿拉斯加 (© Sekar B/Shutterstock)(吃辣第二天长痘痘)

  • Bootstrap——制作个人简历网页、工具类【边框(添加、删除、颜色、圆角)、清除浮动、颜色(文本、链接、背景)、display属性、浮动、定位、文本对齐】(bootstrap-)

  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设 电脑维修 湖南楚通运网络