js前端下载文件,利用download.js或者,纯js下载文件,图片,视频,pdf等

目前,我在百度上,找到了三种方式,下载

第一种

这个方法,用的是FileReader然后readAsDataURL,我自己测试,会比方法二,下载速度要快一点

下面的代码段,可以替换,方法三种 download(blob, fileName)这一行

const a = document.createElement('a')
        document.body.appendChild(a)
        a.style.display = 'none'
        FileReader主要用于将文件内容读入内存
        var reader = new FileReader();
        reader.readAsDataURL(blob);
        // onload当读取操作成功完成时调用
        reader.onload = function(e) {
   
          var a = document.createElement('a');
          // 获取文件名fileName
          a.download = fileName;
          a.href = e.target.result;
          document.body.appendChild(a);
          a.click();
          document.body.removeChild(a);
        }

第二种

这是最早我百度到的方法,后来,发现,大文件在下,需要很长的请求,因为转化成blob前,需要fecth去加载,我们提供的下载地址,加载的过程中,文件越大,越耗时间。所以转化blob也就耗时间,所以可以加loading

下面的代码段,可以替换,方法三种 download(blob, fileName)这一行

const a = document.createElement('a')
        document.body.appendChild(a)
        a.style.display = 'none'
const url = window.URL.createObjectURL(blob)
        a.href = url
        a.download = fileName
        a.click()
        document.body.removeChild(a)
        window.URL.revokeObjectURL(url)

第三种(融合了方法一和方法二,是一个npm包download.js)fetch是浏览器原生提供的一个ajax请求,类似于我们用的axios。我也用axios了。但是跨域了。

如果真的想用axios那用get方法吧,替换方法三种的fetch,post方法,我测试的时候,跨域.

axios.get(url,{responseType: 'blob'}).then(res => {
	const blob =  res.data
	 download(blob, fileName)
 })
// js处理特殊文件下载(pdf、mp3、mp4、图片)
    jsDownload (url, fileName) {
   
    // 请求进来,就可以加在loading
      fetch(url).then(res => {
   
        return res.blob()
      }).then(blob => {
   
      // 这是一个外部引用的download.js文件,这个文件,在下面,可以粘贴到你的项目使用
        download(blob, fileName)
        // 下载结束,loading结束
      }).catch(err => {
   
        console.log(err)
        return false
      }).finally(res => {
   
      // 这里也可以结束loading。不管是成功失败,都会结束loading
        return true
      })
    },

download.js文件,可以复制,保存到项目里,直接import 就行

download.js的github地址。膜拜大佬

//download.js v4.21, by dandavis; 2008-2018. [MIT] see http://danml.com/download.html fo
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值