Node.js之文件下载,主要最近解决我的一个需求。

需求描述:
如何将腾讯云上传的文件存储到本地某个目录下,如果用js来实现,纯JavaScript没有这样的功能(也许有),正好我这个项目用node.js比较多,正好可以利用node.js丰富的API实现该功能。

如下示例代码,演示下载远程文件:

源码如下(download.js):

//下载参数
var http = require("http");
var fs = require("fs");
var path = require("path");
var downFlag = false;
var downUrl = '';
var downFileName = ''; /**
* 下载回调
*/
function getHttpReqCallback (imgSrc, dirName, fileName) { var callback = function(res) {
console.log("request: " + imgSrc + " return status: " + res.statusCode);
var contentLength = parseInt(res.headers['content-length']); var downLength = ; var out = fs.createWriteStream(dirName + "/" + fileName);
res.on('data', function (chunk) { downLength += chunk.length;
var progress = Math.floor(downLength* / contentLength);
var str = "下载:"+ progress +"%";
console.log(str); //写文件
out.write(chunk, function () {
//console.log(chunk.length); }); });
res.on('end', function() {
downFlag = false;
console.log("end downloading " + imgSrc);
if (isNaN(contentLength)) {
console.log(imgSrc + " content length error");
return;
}
if (downLength < contentLength) {
console.log(imgSrc + " download error, try again");
return;
}
});
}; return callback;
} /**
* 下载开始
*/
function startDownloadTask (imgSrc, dirName,fileName) {
console.log("start downloading " + imgSrc);
var req = http.request(imgSrc, getHttpReqCallback(imgSrc, dirName, fileName));
req.on('error', function(e){
console.log("request " + imgSrc + " error, try again");
});
req.end();
} startDownloadTask('http://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.41/bin/apache-tomcat-8.5.41.tar.gz','D://1024Workspace//extension','apache-tomcat-8.5.41.tar.gz'); //startDownloadTask('下载地址','本地存储路径','文件名');

代码经过测试,没有问题。

本文主要参考资料如下:
Node.js文件下载

Node.js之文件下载的更多相关文章

  1. node.js如何将远程的文件下载到本地、解压、读取

    其实要解决的问题,很简单,获取远程文件,然后解压到本地读取. 在vscode中通过node.js来实现是比较方便的,相比之前的zip.js,我觉得我还是比较喜欢node.js实现方式. test.js ...

  2. Node.js面试题:侧重后端应用与对Node核心的理解

    Node是搞后端的,不应该被被归为前端,更不应该用前端的观点去理解,去面试node开发人员.所以这份面试题大全,更侧重后端应用与对Node核心的理解. node开发技能图解 node 事件循环机制 起 ...

  3. node.js上除了Express还有哪些好用的web开发框架

    老司机都有体会, 开发本身没有多难, 最纠结其实是最初的技术和框架选型, 本没有绝对的好坏之分, 可一旦选择了不适合于自己业务场景的框架, 将来木已成舟后开发和维护成本都很高, 等发现不合适的时候更换 ...

  4. Node.js 命令行工具的编写

    日常开发中,编写 Node.js 命令行工具来完成一些小任务是很常见的操作.其编写也不难,和日常编写 Node.js 代码并无二致. package.json 中的 bin 字段 一个 npm 模块, ...

  5. Node.js 种子下载器

    Node.js 种子下载器 庆祝 2018 国庆,制作了一个 Node.js 的种子下载器.爬取页面,根据页面的链接,破解另外一个网站,下载种子文件.项目比较简单,爬取页面没有使用任何爬虫框架.项目源 ...

  6. 快速入门node.js

    运行node node ./1.js let不存在变量提升 /* const fs = require('fs') const path = require('path') fs.readFile(p ...

  7. node.js面试题大全-侧重后端应用与对Node核心的理解

    Node是搞后端的,不应该被被归为前端,更不应该用前端的观点去理解,去面试node开发人员.所以这份面试题大全,更侧重后端应用与对Node核心的理解. github地址: https://github ...

  8. node.js 笔记

    教程总结笔记: 学习网站:http://www.runoob.com/nodejs/nodejs-install-setup.html Node.js 中文网及安装文件下载: http://nodej ...

  9. 阿里云ECS安装最新版本Node.js

    原文  http://www.w3ctech.com/topic/1610 主题 Node.js操作系统服务器 我的ECS实例是Ubuntu操作系统,直接使用 apt-get install node ...

随机推荐

  1. JavaScript对象复制

    近期项目因为怕数据污染所以用到了js的对象复制 js里的对象都是继承自object,是引用类型,所以无法通过=号复制 所以整理了一些常用的复制方法,如下 一.通过JSON序列化和反序列化创建新的对象 ...

  2. 如何打包ANE

    来源:http://blog.sina.com.cn/s/blog_6471e1bb01012aql.html 首先先说一下打包ANE必须的部件: 1.ActionScript扩展库SWC 2.本机扩 ...

  3. 如何使用API的方式消费SAP Commerce Cloud的订单服务

    最近Jerry在做一个微信和SAP Commerce Cloud集成的项目,需要在微信里调用后者的Restful API进行订单创建和读取.以前Jerry对SAP Commerce Cloud知之甚少 ...

  4. SQL SERVER-Exclusive access could not be obtained because the database is in use. (Microsoft.SqlServer.SmoExtended)

    Q:先在一个实例中恢复一个数据A,然后又想在恢复一次,取别名为A2,这是报异常SQL SERVER-Exclusive access could not be obtained because the ...

  5. 18,flask项目中使用celery

    导包: from celery import Celery from celery.result import AsyncResult app.config['CELERY_BROKER_URL'] ...

  6. NFS启动文件系统

    NFS启动文件系统 一.软硬件平台 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3.交换芯片MARVELL的88E ...

  7. 190919 centos系统中python2卸载重装

    问题:某些原因卸载了python2,连带卸载了yum工具. 解决思路: 如果服务器没有什么东西,重装系统最省事.但是如果不允许重装,那就只能按部就班的恢复python2和yum. 步骤: 删除pyth ...

  8. 快速构建ceph可视化监控系统-转载

    前言 ceph的可视化方案很多,本篇介绍的是比较简单的一种方式,并且对包都进行了二次封装,所以能够在极短的时间内构建出一个可视化的监控系统 本系统组件如下: ceph-jewel版本 ceph_exp ...

  9. 渗透之路基础 -- 跨站伪造请求CSRF

    漏洞产生原因及原理 跨站请求伪造是指攻击者可以在第三方站点制造HTTP请求并以用户在目标站点的登录态发送到目标站点,而目标站点未校验请求来源使第三方成功伪造请求. XSS利用站点内的信任用户,而CSR ...

  10. python读取excel的内容

    import csvimport xlrdimport xlwt def handler_excel(filename=r'd:\\wu.xlsx'): # 打开文件 workbook = xlrd. ...