js封装的本地下载

用js封装的本地下载方法

一、应用场景

  1. 如:将页面的图片保存到本地,或者视频、压缩包等其他文件

代码:

downloadZip(fn, name) {
				console.log("DirectDownloadFn")
				const a = document.createElement('a')
				//   let url = baseUrl + binding.value // 若是不完整的url则需要拼接baseURL
				const url = fn // 完整的url则直接使用
				// 这里是将url转成blob地址,
				fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址
					a.href = URL.createObjectURL(blob)
					// //console.log(a.href)
					if (name) {
						a.download = name; // 下载文件的名字
					} else {
						a.download = Math.floor(Math.random() * (1000 - 1)) + 1 || '' // 下载文件的名字
					}
					document.body.appendChild(a)
					a.click()
					//在资源下载完成后 清除 占用的缓存资源
					window.URL.revokeObjectURL(a.href);
					document.body.removeChild(a);
				})
			},
  1. 调用方法
//拿vue项目来演示:
this.downloadZip(参数1, 参数2);

//参数1: 图片的url路径
//参数2: 想要保存的文件名称,这个是自己定,可以随意

//完整写法
const url = "https://baike.baidu.com/link?url=36g2berhfOdjHCaPDTqi_bGYSAX2B2qnCi1jzlnpqTm5VPN_YMNpgUYOdQv30KqxgIU3CCNnnOBbHrt0_tHwgqeJ3-iJPOwLCuBFnyjUpcC"
this.downloadZip(url, "ikun");

二、 多张图片下载(扩展)

  1. 代码:
downloadImages(urls, names = []) {
				console.log("DirectDownloadFn", urls);

				urls.forEach((url, index) => {
					let that = this
					const a = document.createElement('a');

					// Fetch each image and convert it to a blob
					fetch(url).then(res => res.blob()).then(blob => {
						a.href = URL.createObjectURL(blob);

						// Use the provided name or generate a random name
						const name = that.contentInfoObj.type_name + '_' + (index + 1) || Math.floor(Math
							.random() * (1000 - 1)) + 1;
						a.download = name;

						document.body.appendChild(a);
						a.click();

						// Clean up
						window.URL.revokeObjectURL(a.href);
						document.body.removeChild(a);
					}).catch(error => {
						console.error(`Failed to download image from ${url}:`, error);
					});
				});
			},
  1. 方法调用
this.downloadImages(参数1, 参数2)
//说明: 两个参数都是数组
//参数1: 图片路径数组
//参数2: 名称数组
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Axios是一个基于promise的HTTP库,可以用于浏览器和Node.js。它提供了从浏览器中创建HTTP请求的简单方式,以及在Node.js中发起HTTP请求的功能。 在使用Axios进行文件下载时,封装成TypeScript类是一种好的实践。首先,我们需要创建一个名为FileDownloadService的类,并导入Axios和FileSaver.js库(也可以使用其他库来保存文件)。 接下来,我们创建一个名为downloadFile的方法,该方法传递url和fileName两个参数,其中url指定文件的下载链接,fileName指定文件的名称。然后,我们使用Axios发起GET请求,并设置响应类型为blob。 在Axios响应后,我们使用FileSaver.js库将blob响应类型保存为文件,使用saveAs()方法,可以将文件保存到本地。 最后,我们可以在我们的应用程序的其他部分中调用FileDownloadService中的downloadFile函数,以下载文件。 以下是使用TypeScript的Axios封装文件下载的示例: import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'; import { saveAs } from 'file-saver'; class FileDownloadService { public downloadFile = async (url: string, fileName: string) => { try { const response: AxiosResponse = await axios.get(url, { responseType: 'blob', }); const blob = new Blob([response.data], { type: response.headers['content-type'] }); saveAs(blob, fileName); } catch (error) { console.error(error); } }; } export default new FileDownloadService(); 这是一个简单的Axios和TypeScript的文件下载示例。在实际的应用程序中,可能需要添加更多处理逻辑和错误检查语句,以确保下载文件的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值