Vue 项目下载文件最佳解决方案

大厂技术  高级前端  Node进阶

点击上方 程序员成长指北,关注公众号

回复1,加入高级Node交流群

原文链接: https://juejin.cn/post/7062888582465191944
作者: 远航_

开发中经常遇到这样的功能,用户将文件或附件上传到服务器,后端将文件放到ftp或是其他位置,在前端页面内有下载的入口,有时候,后端返回的是blob,这种情况当然是最好的,但是为了方便,后端也可能返回文件所在位置的url,这时,对前端来说,可能遇到一些问题,比如,下载文件时候浏览器可能会出现闪动,下载图片,json文件等浏览器支持的文件时候,不会下载,而是直接在浏览器内打开这类文件,下面的方法可以完美解决此类问题

解决方案:

  • 封装自定义指令

  • 将url转成bold,在创建a标签下载blob

代码实现

  1. 在src 下面的 directive 文件夹下新建目录 downLoadUrl

d4d069eded165ee99699ef9553c4d265.png
  1. downLoadUrl / index.js文件

/*
 * 后端返回文件的url,前端创建a标签来下载
 *
 *  1. 解决了若文件为图片或浏览器支持的格式类型,点击下载会直接打开文件的问题,
 *  2. 下载文件时,浏览器会有闪动的问题
 *
 *  页面内使用
 *  1. 引入指令 import downLoad from '@/directive/down-load-url'
 *  2. 注册指令 directives:{downLoad}
 *  3. 使用,在要下载按钮上以指令的形式使用 例如: <el-button v-downLoad="url">下载</el-button>
 */

import downLoad from './downLoad'

const install = function(Vue) {
  Vue.directive('downLoadUrl', downLoad)
}

downLoad.install = install

export default downLoad
  1. downLoadUrl / downLoad.js文件

export default {
    bind(el, binding) {
        if (binding.value.url) {
            el.addEventListener('click', () => {
                const a = document.createElement('a')
                //   let url = baseUrl + binding.value // 若是不完整的url则需要拼接baseURL
                const url = binding.value.url // 完整的url则直接使用
                // 这里是将url转成blob地址,
                fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址
                    a.href = URL.createObjectURL(blob)
                    console.log(a.href)
                    a.download = binding.value.name || '' // 下载文件的名字
                    // a.download = url.split('/')[url.split('/').length -1] //  // 下载文件的名字
                    document.body.appendChild(a)
                    a.click()
                    
                    //在资源下载完成后 清除 占用的缓存资源
                    window.URL.revokeObjectURL(a.href);
                    document.body.removeChild(a);
                })
            })
        }
    }
}
  1. main.js注册自定义指令

1bd59351bbb8d6c9b4be329290d94ba1.png

使用

返回一个对象{ url: '', name: ''} 203dbadfca62f895c52a5dcb5d392501.png

01e09f2af6bc217ff4f7d5dd6ad1a6ed.png

注意

1、若是文件的url存在跨域的情况,则可能会下载失败,因为fetch请求连接后,由于跨域,拿不到资源,也就无法执行后续的操作,此时是失败的。

db710ddd1fba76e2db3ba6d920733a78.png 2b86e376ad0fb20a68f312e87617d7f0.png

插件 file-saver 链接地址: blog.csdn.net/qq_30671099…

Node 社群


我组建了一个氛围特别好的 Node.js 社群,里面有很多 Node.js小伙伴,如果你对Node.js学习感兴趣的话(后续有计划也可以),我们可以一起进行Node.js相关的交流、学习、共建。下方加 考拉 好友回复「Node」即可。

如果你觉得这篇内容对你有帮助,我想请你帮我2个小忙:

1. 点个「在看」,让更多人也能看到这篇文章2. 订阅官方博客 www.inode.club 让我们一起成长

点赞和在看就是最大的支持❤️
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Vue框架编写可视化项目可以按照以下步骤进行: 1. 确定项目需求和功能:确定可视化项目所需实现的功能和展示效果。 2. 选择数据可视化库:根据项目需求选择合适的数据可视化库,如ECharts、D3.js等。 3. 构建Vue项目:使用Vue-CLI构建一个Vue项目。 4. 安装数据可视化库:使用npm或yarn安装选择的数据可视化库。 5. 创建组件:创建组件来展示可视化数据,使用Vue生命周期方法和钩子函数处理数据。 6. 样式设计:设计组件样式和交互效果,使用CSS、Sass等技术。 7. 调试和测试:使用Vue开发工具和浏览器开发者工具进行调试和测试。 8. 部署和发布:将Vue项目打包并部署到服务器上进行发布。 以上是编写Vue可视化项目的一般步骤,具体实现根据项目需求和数据可视化库的不同而异。 ### 回答2: 使用Vue框架编写可视化项目相对简单且高效。首先,我们可以选择合适的Vue可视化库,如Echarts或D3.js来实现图表的绘制和交互。 在项目的开始,我们首先建立一个Vue实例作为整个应用的基础。通过Vue的指令和数据绑定,我们可以轻松地实现组件的展示和用户的交互。例如,我们可以使用v-for指令循环渲染数据列表,并使用v-bind将数据绑定到DOM元素上。这样,我们就可以动态地显示数据,并通过用户的交互改变数据的状态。 在可视化项目中,数据的处理和呈现至关重要。我们可以使用Vue组件的特性将复杂的可视化逻辑分解为多个组件,提高项目的可维护性和重用性。通过组件间的通信机制,我们可以将数据和事件在各个组件之间进行传递和响应。例如,我们可以在父组件中请求数据,并将数据传递给子组件进行图表的绘制和展示。 在项目的构建过程中,我们可以使用Vue的路由功能将项目分为多个页面,实现不同页面间的切换和跳转。同时,我们可以使用Vue的状态管理库(如Vuex)来集中管理和控制应用的状态,方便数据的共享和更新。 最后,在项目的部署阶段,我们可以使用Vue的打包工具(如Webpack)将项目打包成静态文件,并通过服务器部署在云端或本地。这样,我们就能够通过浏览器访问我们的可视化项目,实现数据的动态展示和交互。 总而言之,使用Vue框架编写可视化项目能够让我们快速搭建并管理项目的结构和逻辑,实现数据的可视化展示和用户的交互体验。同时,Vue的灵活性和丰富的生态系统也为我们开发出更加复杂和高效的可视化项目提供了良好的基础。 ### 回答3: Vue是一个非常流行的JavaScript框架,用于构建用户界面。它具有响应式数据绑定和组件化的特点,使得开发者可以更加高效地构建可视化项目。下面我将简要介绍如何使用Vue框架来编写一个可视化项目。 首先,我们需要安装Vue框架。可以通过npm或yarn命令来进行安装。安装完成后,我们可以使用Vue命令行工具来创建一个新的Vue项目。 创建Vue项目后,我们可以使用Vue的核心功能来实现可视化功能。Vue提供了一些内置指令,如v-bind用于绑定数据,v-if和v-for用于控制渲染逻辑等。我们可以利用这些指令来动态渲染数据,并将其可视化展示出来。 在可视化项目中,数据通常是关键的。我们可以使用Vue数据管理工具Vuex来管理数据和状态。Vuex提供了一种集中式存储管理解决方案,可以让我们更好地管理和共享状态。 除了核心功能和数据管理,Vue还提供了丰富的第三方库和插件来增强可视化项目的功能。比如,我们可以使用echarts或d3等图表库来实现数据可视化,使用Element UI或Vuetify等UI库来美化用户界面。 在编写可视化项目时,我们可以借助Vue的生命周期钩子函数来实现一些特定的逻辑。比如,created钩子函数在组件实例被创建后立即调用,我们可以在这里进行初始化数据等操作。 最后,在实现可视化项目时,我们需要考虑一些性能优化和最佳实践。Vue提供了一些优化技巧,如异步组件、虚拟DOM和缓存等,可以帮助我们提升项目的性能。 总结一下,使用Vue框架编写一个可视化项目可以让我们更加高效地构建用户界面,并提供了丰富的功能和插件来增强项目的表现力。同时,我们可以利用Vue数据管理工具Vuex来管理和共享状态。在实现项目时,我们需要考虑一些性能优化和最佳实践。希望上述回答能帮到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值