当前位置:   article > 正文

Vue中点击url下载文件-案例_vue downloadbyurl

vue downloadbyurl
  • 封装自定义指令
  • 将url转成bold,在创建a标签下载blob

代码实现

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

  1. downLoadUrl / index.js文件
  1. /*
  2. * 后端返回文件的url,前端创建a标签来下载
  3. *
  4. * 1. 解决了若文件为图片或浏览器支持的格式类型,点击下载会直接打开文件的问题,
  5. * 2. 下载文件时,浏览器会有闪动的问题
  6. *
  7. * 页面内使用
  8. * 1. 引入指令 import downLoad from '@/directive/down-load-url'
  9. * 2. 注册指令 directives:{downLoad}
  10. * 3. 使用,在要下载按钮上以指令的形式使用 例如: <el-button v-downLoad="url">下载</el-button>
  11. */
  12. import downLoad from './downLoad'
  13. const install = function(Vue) {
  14. Vue.directive('downLoadUrl', downLoad)
  15. }
  16. downLoad.install = install
  17. export default downLoad
  1. downLoadUrl / downLoad.js文件
  1. export default {
  2. bind(el, binding) {
  3. if (binding.value.url) {
  4. el.addEventListener('click', () => {
  5. const a = document.createElement('a')
  6. // let url = baseUrl + binding.value // 若是不完整的url则需要拼接baseURL
  7. const url = binding.value.url // 完整的url则直接使用
  8. // 这里是将url转成blob地址,
  9. fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址
  10. a.href = URL.createObjectURL(blob)
  11. console.log(a.href)
  12. a.download = binding.value.name || '' // 下载文件的名字
  13. // a.download = url.split('/')[url.split('/').length -1] // // 下载文件的名字
  14. document.body.appendChild(a)
  15. a.click()
  16. //在资源下载完成后 清除 占用的缓存资源
  17. window.URL.revokeObjectURL(a.href);
  18. document.body.removeChild(a);
  19. })
  20. })
  21. }
  22. }
  23. }
  1. 在main.js注册自定义指令

使用

返回一个对象{ url: '', name: ''}

 

注意

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

2、也可以设置浏览器,对于一下像pdf,图片等资源不直接打开,直接下载,然后简单的创建a标签下载即可。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/683432
推荐阅读
相关标签
  

闽ICP备14008679号