需要循环去下载远程文件,然后自己写了一个demo,可以直接运行,如下:

//文件下载
var fs = require("fs");
var path = require("path");
var request = require("request"); //创建文件夹目录
var dirPath = path.join(__dirname, "file");
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath);
console.log("文件夹创建成功");
} else {
console.log("文件夹已存在");
} //循环多线程下载
for (let i = 0; i < 60; i++) {
let fileName = "out" + intToString(i, 3) + ".ts";
let url = "https://xxx.sdhdbd1.com/cb9/sd/gc/g1/670BC531/SD/" + fileName;
let stream = fs.createWriteStream(path.join(dirPath, fileName));
request(url).pipe(stream).on("close", function (err) {
console.log("文件[" + fileName + "]下载完毕");
});
} //整数转字符串,不足的位数用0补齐
function intToString(num, len) {
let str = num.toString();
while (str.length < len) {
str = "0" + str;
}
return str;
}

原文参考了:https://blog.csdn.net/tiantangyouzui/article/details/52841406

//文件下载
var fs = require("fs");
var path = require("path");
var request = require("request");
var co = require("co"); //创建文件夹目录
var dirPath = path.join(__dirname, "file");
if (!fs.existsSync(dirPath)) {
fs.mkdirSync(dirPath);
console.log("文件夹创建成功");
} else {
console.log("文件夹已存在");
} function* downFile(url, fileName) {
return new Promise(function (resolve, reject) {
request(url, function (error, response, body) {
if (!error && response.statusCode == 200) {
let stream = fs.createWriteStream(path.join(dirPath, fileName));
request(url).pipe(stream).on("close", function (err) {
resolve("下载成功");
});
} else {
if (error) {
reject(error);
} else {
reject(new Error("下载失败,返回状态码不是200,状态码:" + response.statusCode));
}
}
});
}); } co(function* () {
//循环多线程下载
for (let i = 50; i < 500; i++) {
// let fileName = "out" + intToString(i, 3) + ".ts";
// let url = "https://xxx.sdhdbd1.com/cb9/sd/gc/g1/DBC3A6CE/SD/" + fileName;
let fileName = "/media_b500000_" + i + ".ts";
let url = "http://sjvodcdn.cbg.cn:1935/app_1/_definst_/smil:getnew/sobeyget/vod/2018/04/19/9bdcd66a74954c84a50375c608c0e692/1524106287_7835.smil" + fileName; try {
let m = Math.floor(i / 50).toString();//50个文件一个文件夹
let cDir = path.join(dirPath, m);
if (!fs.existsSync(cDir)) {
fs.mkdirSync(cDir);
console.log("文件夹[" + cDir + "]创建成功");
}
yield downFile(url, path.join(m, fileName));
console.log("下载成功" + fileName);
} catch (err) {
console.log(err);
break;
}
} }); //整数转字符串,不足的位数用0补齐
function intToString(num, len) {
let str = num.toString();
while (str.length < len) {
str = "0" + str;
}
return str;
}

nodejs通过request请求远程url的文件并下载到本地的更多相关文章

  1. php请求远程url内容方法

    php请求远程url内容有两个方法fopen/file_get_contents和curl. 1,fopen/file_get_contents与curl的差异 (1)fopen /file_get_ ...

  2. Github文件夹下载到本地

    1.如图:需要将以下文件夹下载到本地. https://github.com/aspnet/Docs/tree/master/aspnet/mvc/overview/getting-started/i ...

  3. go将青龙面板里面的脚本文件都下载到本地

    纯粹练手用的,大家轻喷 青龙面板的脚本文件可以下载到本地,这样的话自己可以研究一下对应的脚本文件,能学到更多的知识,原理其实很简单,F12一下就知道了,青龙面板使用Request Headers里面放 ...

  4. 安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的

    安装时后的idea,项目不能运行,pom.xml文件不能下载到本地仓库,maven配置是正确的 项目上传到svn后,同事下载项目后,没有识别出来mavn中的pom.xml文件,导致idea不能自动下载 ...

  5. post请求远程url 报错“基础连接已经关闭...Authentication.AuthenticationException...远程证书无效”解决方案

    当我们有时用代码编写post请求url远程地址会报“基础连接已经关闭: 未能为 SSL/TLS 安全通道建立信任关系. ---> System.Security.Authentication.A ...

  6. 通过阿里OSS文件服务返回的URL获取文件流下载

    我们都知道将文件上传到阿里的OSS文件服务上后,可以通过generatePresignedUrl(bucketName, key, expiration)方法获取该文件的防问路径,但是当我们知道该文件 ...

  7. 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)

    欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径 遇到的问题: 1.项目之前做过一次下载,但是是使用了本地文件模板.用输入流读取文件模板,插入数据, ...

  8. flask使用pymysql连接MySQL,生成xls文件并下载到本地

    版本一:将MySQL数据写入到excel(xsl)文件并下载到默认文件夹(一般问电脑的下载文件夹里面),并显示特效到前端页面. flask框架连接MySQL,我们使用pymsql这个工具,如下操作: ...

  9. byte转文件流 下载到本地

    此方法将byte类型文件转为文件流保存到本地 byte 经过BASE64Decoder 进行编码之后的类型 所以需要解码 防止出现乱码及文件损毁 /** * byte 转文件 下载到本地 * @par ...

随机推荐

  1. 选择排序法、冒泡排序法、插入排序法、系统提供的底层sort方法排序之毫秒级比较

    我的代码: package PlaneGame;/** * 选择排序法.冒泡排序法.插入排序法.系统提供的底层sort方法排序之毫秒级比较 * @author Administrator */impo ...

  2. Codeforces Round #439 (Div. 2) Problem E (Codeforces 869E) - 暴力 - 随机化 - 二维树状数组 - 差分

    Adieu l'ami. Koyomi is helping Oshino, an acquaintance of his, to take care of an open space around ...

  3. django基础 -- 1. 前奏 web框架的本质

    一. http协议 1.请求方法(get和post) 1.GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test ...

  4. CentOS7搭建jdk

    背景 现在很多Linux系统在安装完成时就自带jdk,但是系统自带的jdk有时候并不符合我们的需求,这时候我们需要自己来安装jdk. 步骤 下载jdk,我下载的是64位的jdk-8u161-linux ...

  5. Python3基础 list reverse 反转列表

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  6. Restful framework【第六篇】认证组件

    基本用法 -认证功能 1 写一个类,继承BaseAuthentication 2 def authenticate(self,request) ,记住传request对象 -如果验证通过,返回None ...

  7. linux基础之程序包管理(rpm,yum)

    一.rpm 安装:rpm { -i | --install } [ install-options ] PACKAGE_FILE... -v: 显示安装时的详细信息 -vv: 显示许多难以阅读的调试信 ...

  8. IPVS负载均衡

    概念: ipvs (IP Virtual Server) 实现了传输层负载均衡,也就是我们常说的4层LAN交换,作为 Linux 内核的一部分.ipvs运行在主机上,在真实服务器集群前充当负载均衡器. ...

  9. UVALive 7512 November 11th 题解

    思路:心态大崩,最多不讲了,最少应该是三个一组,比如......应该是.S..S.,这样占的最多 代码: #include<set> #include<map> #includ ...

  10. 好用的js模板

    组织form下的 json对象 $.fn.serializeObject = function() { var o = {"unique_id":new Date().getTim ...