如何在没有任何额外包的情况下使用 NodeJS 下载文件

news/2024/3/29 20:30:49/文章来源:https://blog.csdn.net/Deng872347348/article/details/129250321

如何在没有任何额外包的情况下使用 NodeJS 下载文件

您可以下载文件(图像、文本或任何类型的文件)并使用 NodeJS 内置 httpsfs模块将其保存到您的文件系统。

https模块允许您使用 NodeJS 创建 HTTPS 请求,同时该 fs模块授予您访问文件系统的权限。

通过组合这两个模块,您可以创建一个 HTTPS GET 请求并将响应流作为一个新文件写入您的文件系统。

首先,使用以下方法创建一个名为的新文件 download.js并将两个模块导入到您的脚本中:require()

const https = require("https");
const fs = require("fs");

然后,创建一个 url可以在 Internet 上公开访问的文件的字符串。

例如,我将尝试从 .png的网站下载图片:

const url = "网上图片的地址";

接下来,调用该 https.get()方法并将 url变量作为其第一个参数传递。该方法的第二个参数将是 callback您希望在收到响应流后运行的函数:

https.get(url, (res) => {// TODO: create a writable stream// and save the received data stream
});

在函数内部 callback,将要保存的文件的名称写为变量 path。例如,我想保存图像并将其命名为 downloaded-image.png"

https.get(url, (res) => {const path = "downloaded-image.png";
});

现在您需要使用 fs.createWriteStream()方法创建一个新的可写流并将 path变量作为其参数传递。默认情况下,该 fs模块将在当前文件夹上创建可写流:

https.get(url, (res) => {const path = "downloaded-image.png";const writeStream = fs.createWriteStream(path);
});

最后,使用方法将 GET响应数据流发送到对象。当发送信号时,关闭对象:writeStream``pipe()``writeStream``finish``writeStream

https.get(url, (res) => {const path = "downloaded-image.png";const writeStream = fs.createWriteStream(path);res.pipe(writeStream);writeStream.on("finish", () => {writeStream.close();console.log("Download Completed");});
});

完整的JavaScript代码如下所示:

const https = require("https");
const fs = require("fs");// URL of the image
const url = "http://sop.zszhenpin.com/_pc_sy_PAj6d__.html2?utm_source=baiduPC&utm_medium=%E8%87%BB%E5%93%81%E5%9B%BD%E9%99%85F14&utm_term=A9%2D%E3%80%90sy%E9%AB%98%E3%80%91&utm_content=%E6%97%85%E6%B8%B8&utm_campaign=%E6%97%85%E6%B8%B8%E5%A4%9A%E5%B0%91&bd_vid=9052837594730046416";https.get(url, (res) => {const path = "downloaded-image.png";const writeStream = fs.createWriteStream(path);res.pipe(writeStream);writeStream.on("finish", () => {writeStream.close();console.log("Download Completed");});
});

您可以使用命令执行脚本 node以查看它的运行情况:

node download

此外,您还可以向脚本提供两个命令行参数,如下所示:

  • 第一个参数将是您要下载的文件的 URL
  • 第二个参数将是将保存到文件系统的文件的名称

您可以从属性中获取命令行参数 process.argv,并在用户未将两个参数都传递给脚本时停止脚本:

const { argv } = process;
const [, , url, path] = argv;if (url === undefined) {console.log(`The 'url' argument is missing. You need to pass the file url as the first argument`);return;
}if (path === undefined) {console.log(`The 'path' argument is missing. You need to pass the save path as the second argument`);return;
}

将上面的代码传递到导入的正下方,如下所示:

const https = require("https");
const fs = require("fs");const { argv } = process;
const [, , url, path] = argv;if (url === undefined) {console.log(`The 'url' argument is missing. You need to pass the file url as the first argument`);return;
}if (path === undefined) {console.log(`The 'path' argument is missing. You need to pass the save path as the second argument`);return;
}https.get(url, (res) => {const writeStream = fs.createWriteStream(path);res.pipe(writeStream);writeStream.on("finish", () => {writeStream.close();console.log("Download Completed");});
});

这样,您就可以重新使用该 download.js文件从 URL 下载文件。每次执行脚本时,从命令行传递所需参数 url和参数。path

下面的示例将从第一个参数下载图像并将其另存为 image.png

node download ‘网上图片地址’

这就是您可以使用 NodeJS 下载文件而无需安装任何额外包的方法。

有时,您可能需要下载多个文件并将它们保存到您的系统中。

我建议您使用 npm download包而不是编写自己的代码。

download软件包允许您下载多个图像并将它们保存在一个文件夹下,如下所示:

const download = require("download");(async () => {await Promise.all(["第一张图片地址","第二张图片地址",].map((url) => download(url, "dist")));
})();

上面的代码将 default.pngnathan-sebhastian.png文件都保存到 ./dist文件夹中。查看downloadnpm 页面以获取更多信息。

去npm 官网可以看到download 模块的用法:

image.png

image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_75083.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【论文精读11】MVSNet系列(2018-2022)总结

MVSNet系列总结1.MVSNet ECCV20182.RMVSNet CVPR20193.P-MVSNet ICCV20194.MVSCRF ICCV20195.PointMVSNet ICCV20192019年的这四篇文章各有特点,其中RMVSNet、PointMVSNet更是打开了可以继续沿着往下做的思路:6.cascade MVSNet CVPR20207.UCSNet CVPR202…

Python-GEE遥感云大数据分析、管理与可视化技术及多领域案例实践应用

随着航空、航天、近地空间等多个遥感平台的不断发展,近年来遥感技术突飞猛进。由此,遥感数据的空间、时间、光谱分辨率不断提高,数据量也大幅增长,使其越来越具有大数据特征。对于相关研究而言,遥感大数据的出现为其提…

Python基础—while循环

(1)while循环&#xff1a; 语法格式&#xff1a; while 条件&#xff1a;   执行语句1……   执行语句2…… 适用条件&#xff1a;无限循环 死循环 while True:print(条件是真的&#xff01;)代码实例&#xff1a; i 0 # 创建一个计数的变量 while i < 5: # Truepr…

一个容易被忽视的标签 —— iframe

前言 甲问&#xff1a;说说你知道的HTML标签。 乙于是说了一大堆标签&#xff0c;比如div&#xff0c;span等等。 甲说&#xff1a;那你知道 iframe 标签吗&#xff1f; 乙这时候迟疑了片刻&#xff0c;缓缓说出&#xff1a;知道它&#xff0c;但是不太了解这个标签。 HTM…

Linux文件属性--软连接和硬链接

文章目录软链接硬链接软链接和硬链接的区别软链接 软链接&#xff08;Soft Link&#xff09;又叫符号链接&#xff08;Symbolic Link &#xff09;&#xff0c;是linux特殊文件的一种&#xff0c;文件类型为l,它的数据是它所链接的文件或目录的路径。软链接可以跨磁盘和 分区…

动手学深度学习(第二版)学习笔记 第三章

第三章 线性神经网络 代码&#xff1a;d2l-zh/pytorch/chapter_linear-networks 3.1 线性回归 3.1. 线性回归 — 动手学深度学习 2.0.0 documentation 解析解 线性回归的解可以用一个公式简单地表达出来&#xff0c;这类解叫作解析解&#xff08;analytical solution&…

git在工作中的正常使用

开发A和B功能后进行发版。。 一、拉取代码 git clone http://ntc.ntsvars.com:8090/lvweijie/test.git二、开发功能A任务 创建A任务本地分支 #创建A分支&#xff0c;并切换A分支 git checkout -b A三、开发A任务 四、提交A功能文件到本地分支 git add .五、添加提交A功能备…

AcWing3485. 最大异或和

先看题目&#xff1a; 说实话&#xff0c;我看到这道题就想用滑动窗口&#xff0c;但是滑了一下发现不太对啊&#xff0c;如果我用滑动窗口的话&#xff0c;那么最后肯定是一个固定长度为m的窗口在持续计算&#xff0c;区间长度小于m的区间的异或和肯定会被遗漏。然后我就想怎么…

FSP:Flow of Solution Procedure (CVPR 2017) 原理与代码解析

paper&#xff1a;A Gift From Knowledge Distillation: Fast Optimization, Network Minimization and Transfer Learningcode&#xff1a;https://github.com/HobbitLong/RepDistiller/blob/master/distiller_zoo/FSP.py背景深度神经网络DNN逐层生成特征。更高层的特征更接近…

决策树在sklearn中的实现

目录 一.模块sklearn.tree 二.建模基本流程 三.DecisionTreeClassifier重要参数 1.criterion 2.random_state & splitter 3.剪枝参数max_depth 4.剪枝参数min_samples_leaf & min_samples_split 5.max_features & min_impurity_decrease 6.class_weight …

Python IDE:对于 Python 初学者来说,最好的 IDE 是什么?

Python 是科技界最简单、使用最广泛的编程语言之一。它是一种高级通用编程语言&#xff0c;强调代码可读性并使用面向对象的方法。Python可以用来完成很多任务&#xff0c;包括网站开发、软件开发、 自动化 和数据分析 专业开发人员使用Python开发各种流行的软件程序&#xff0…

深入理解Spring MVC上

Spring MVC 是一种基于 Spring 框架的 Web 框架&#xff0c;它提供了一种基于 Model-View-Controller&#xff08;MVC&#xff09;的设计模式&#xff0c;用于构建 Web 应用程序。在 Spring MVC 中&#xff0c;Controller 接受并处理 HTTP 请求&#xff0c;并将其转发给适当的 …

多表left join 慢sql问题

作为个人记录&#xff0c;后续再填坑a对p是1对多 ,p对llup 1对多SELECTa.id,p.id,t1.id FROMliv_series_product aINNER JOIN liv_product p ON p.id a.product_idLEFT JOIN ( SELECT llup.id, llup.product_id, llup.room_id FROM liv_live_user_product llup WHERE llup.ro…

Tomcat部署及多实例

Tomcat部署及多实例一、Tomcat简介1、Tomcat核心组件2、什么是JSP二、Tomcat数据流向1、Tomcat数据流向2、Tomcat-Nginx数据流向三、Tomcat服务部署安装1、安装jdk包2、解压Tomcat所需的安装包3、在/etc/profile添加环境变量4、启动服务并查看5、在浏览器网页验证6、创建用户&a…

为什么硬件性能监控很重要

当今的混合网络环境平衡了分布式网络和现代技术的实施。但它们并不缺少一个核心组件&#xff1a;服务器。保持网络正常运行时间归结为监控和管理导致网络停机的因素。极有可能导致性能异常的此类因素之一是硬件。使用硬件监控器监控网络硬件已成为一项关键需求。 硬件监视器是…

优化知识管理方法丨整理零碎信息,提高数据价值

信息流时代&#xff0c;知识成集合倍数增长&#xff0c;看似我们学习了很多知识&#xff0c;但知识零碎无系统&#xff0c;知识之间缺乏联系&#xff0c;没有深度&#xff0c;所以虽然你很努力&#xff0c;但你发现自己的能力增长特别缓慢&#xff0c;你需要整理知识将零散的知…

蓝桥杯:染色时间

蓝桥杯&#xff1a;染色时间https://www.lanqiao.cn/problems/2386/learning/?contest_id80 问题描述 输入格式 输出格式 样例输入输出 样例输入 样例输出 评测用例规模与约定 解题思路&#xff1a;优先队列 AC代码(Java)&#xff1a; 问题描述 小蓝有一个 n 行 m 列…

std::chrono笔记

文章目录1. radio原型作用示例2. duration原型&#xff1a;作用示例3. time_point原型作用示例4. clockssystem_clock示例steady_clock示例high_resolution_clock先说感觉&#xff0c;这个库真恶心&#xff0c;刚接触感觉跟shi一样&#xff0c;特别是那个命名空间&#xff0c;太…

vue2 diff算法

diff是什么 diff 算法是一种通过同层的树节点进行比较的高效算法 其有两个特点&#xff1a; ♥比较只会在同层级进行, 不会跨层级比较 ♥在diff比较的过程中&#xff0c;循环从两边向中间比较 diff 算法的在很多场景下都有应用&#xff0c;在 vue 中&#xff0c;作用于虚拟 dom…

预备2-CMD常用命令

CMD常用命令 先学简单常用的, 其余的要用在学 打开Cmd窗口 Win键R> 输入Cmd回车鼠标点击开始 > 附件>Cmd打开一个窗口,在地址栏输入cmd 操作目录 1.dir 查询当前目录有哪些文件 2.cd.. 上一级目录 3.cd e: 切换到E盘 4.d: 直接去d盘 5.cd /d e:abc 直接去E盘的abc目…