Js下载文件

js下载文件


a标签直接通过url下载文件

const video = 'https://xxx';

function download(url,name){
	const a = document.createElement("a");
	a.href = url;
	a.download = name;
	a.click();
	a.remove();
}
	
download(video, 'demo')

a标签通过转换后的url下载文件

const video = 'https://xxx';

function download(url,name){
	fetch(url)
	.then(res => res.blob())
	.then(blob => {
		const a = document.createElement("a");
		const objectUrl = window.URL.createObjectURL(blob);
		a.download = name;
		a.href = objectUrl;
		a.click();
		window.URL.revokeObjectURL(objectUrl);
		a.remove();
	})
}

download(video, 'demo')

// 调用 window.URL.revokeObjectURL()方法来释放它们所占用的内容
// 虽然浏览器会在当前文档被卸载的时候释放,手动释放是为了更好的性能和更少的内存占用

iframe标签实现下载文件

const video = 'https://xxx';

function download(url){
	const iframe = document.createElement("iframe");
	iframe.setAttribute("hidden","hidden");
	document.body.appendChild(iframe);
	iframe.onload = () => {
		if(iframe){
			iframe.setAttribute('src','about:blank');
		}
	};
	iframe.setAttribute("src",url);
}

download(video)

axios请求下载文件

const video = 'https://xxx';

function download(url, name, callback) {
  return new Promise((resolve, reject) => {
    axios(url, {
      method: 'get',
      responseType: 'blob',
      onDownloadProgress: (evt) => {
        console.log('progress: ' + progress + '%')
		if(typeof callback === 'function'){
		const progress = parseInt((evt.loaded / evt.total) * 100)
			callback(progress)
		}
      },
    })
      .then(res => {
        const type = res.headers['content-type'] //请求头中文件类型
        const blob = new Blob([res.data])
        const a = document.createElement('a')
        a.download = name + '.' + type?.replace('video/', '')
        a.href = URL.createObjectURL(blob)
        a.click()
        URL.revokeObjectURL(a.href)
        a.remove()
        resolve()
      })
      .catch(err => {
        reject(err)
      })
  })
}

download(video, 'demo', (progress) => {
	// 下载进度
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值