IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Node——Request、Fetch 实现文件下载 -> 正文阅读

[JavaScript知识库]Node——Request、Fetch 实现文件下载

1. 方案一、request

const request = require("request")
const fs = require('fs');
const progress = require('progress-stream')
const https = require("https")
const http = require("http")

/* 下载文件地址 */
let url = "https://archive.apache.org/dist/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.zip"
/* 文件存储地址 */
let targetUrl = `E:\\development\\myProject\\pc-dev-tool\\download\\apache-maven-3.8.5-bin.zip`

/* 下载文件
		@param url 文件地址
		@param targetUrl 存储地址
	 */
async function downloadUrlFile(url, targetUrl) {
	let stream = fs.createWriteStream(targetUrl)
	let p = await setDownloadProgress(url, fn)
	let downloadRequest = request(url)
	downloadRequest.pipe(p).pipe(stream)
}

/* 获取文件大小 */
function getUrlFileSize(url) {
	return new Promise(r => {
		let h = { http, https }
		let isHttps = url.indexOf("https") != -1
		h[isHttps ? "https" : "http"].get(url, {
			rejectUnauthorized: false
		}, (res) => {
			r(res.headers['content-length'])
		})
	})
}

/* 设置下载进度 */
async function setDownloadProgress(url, fn) {
	let p = progress({
		length: await getUrlFileSize(url),
		time: 500
	})
	p.on('progress', progress => {
		console.log("下载进度:", progress.percentage)
	});
	return p
}

/* 执行 */
downloadUrlFile(url,targetUrl)

2. 方案二、fetch

注:node-fetch版本过高可能会报错,当前用的是 “node-fetch”: “^2.6.1”

const fetch = require('node-fetch')
const fs = require('fs');
const progressStream = require('progress-stream')
const AbortController = require("abort-controller")

/* 下载文件地址 */
let url = "https://archive.apache.org/dist/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.zip"
/* 文件存储地址 */
let target = `E:\\development\\myProject\\pc-dev-tool\\download\\apache-maven-3.8.5-bin.zip`

/* 创建文件流 */
const fileStream = fs.createWriteStream(target).on('error', function(e) {
	console.error('错误', e)
}).on('ready', function() {
	console.log("开始下载:");
}).on('finish', function() {
	console.log('文件下载完成:');
});

fetch(url, {
	method: 'GET',
	headers: {
		'Content-Type': 'application/octet-stream'
	},
}).then(res => {
	/* 获取请求头中的文件大小数据 */
	let length = res.headers.get("content-length");
	/* 创建进度 */
	let str = progressStream({
		length,time: 100
	});
	str.on('progress', function(progressData) {
		let percentage = Math.round(progressData.percentage) + '%';
		console.log(percentage);
	});
	res.body.pipe(str).pipe(fileStream);
}).catch(e => {
	//自定义异常处理
	console.log(e);
});
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:14:48  更:2022-03-30 18:18:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:47:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码