Node.js的那些坑(一)——多进程中图片下载有时为0字节
2016-12-23 16:40
387 查看
序最近由于工作需要重新开始使用Node.js,发现和几年前比强大了不少,同时也发现了不少坑。在同事们的帮助下解决了一些(在此表示感谢)。本系列博客积累并总结这些问题,与君共勉。有问题的写法:首先,一开始用到了request对象的pipe方法。但当下面这段代码出现在子线程当中(cluster.isWorker分支当中)时,下载的图片有时会变成0字节。
var request = require('request');
var imgUrl = "http://www.duzixi.com/img/logo_zixi.png";
var imgPath = file.imgPath(imgUrl);request(imgUrl).pipe(fs.createWriteStream(imgPath));其中,file.imgPath是一个根据URL路径获取本地存储图片路径的方法。定义在file.js中。file.js
let _imgPath = (imgUrl) => {var localPath = path_release + "assets/texture/";var i = imgUrl.lastIndexOf("/");var j = imgUrl.lastIndexOf('.');var str = imgUrl.substr(j + 1);return localPath;}exports.imgPath = _imgPath;以上源代码中的path_release读自本地Config.json文件,是当前程序运行的路径。图片会下载在其下的assets目录下的texture目录中。问题的解决方案:问题的解决方案是,改变下载的方式。同时将图片下载方法封装在file.js中,代码如下:file.js
exports.getImage = (imgUrl) => {return new Promise(resolve => {var imgPath = _imgPath(imgUrl);request({url: imgUrl,encoding:null}, (err, response, body) => {fs.writeFileSync(imgPath,body,{encoding:'binary'})resolve()})})}放弃pipe方法,而直接改用成request下载的方式。至于为什么这样做会成功,我也解释不清楚(望高人指点),但原先图片下载有时为0字节的问题确实解决了。
相关文章推荐
- angular.js+node.js实现下载图片处理详解
- Node.js meitulu图片批量下载爬虫1.02版
- Node.js monly图片批量下载爬虫1.00
- 详解node.js 下载图片的 2 种方式
- Node.js meitulu图片批量下载爬虫1.051
- node.js爬虫之下载图片,批量下载图片,控制下载图片并行上限
- Node.js umei图片批量下载Node.js爬虫1.00
- Node.js 4493图片批量下载爬虫1.00
- Node.js mimimn图片批量下载爬虫 1.00
- node.js 下载图片的 2 种方式
- Node.js 使用爬虫批量下载网络图片到本地
- Node.js abaike图片批量下载Node.js爬虫1.00版
- Node.js meitulu图片批量下载爬虫1.04版
- Node.js mzitu图片批量下载爬虫1.00
- 利用Node 搭配uglify-js压缩js文件,批量下载图片到本地
- Node.js meitulu图片批量下载爬虫1.01版
- Node.js meitulu图片批量下载爬虫1.06版
- Node.js nvshens图片批量下载爬虫 1.00
- Node.js nvshens图片批量下载爬虫1.01
- Node.js制作图片下载爬虫的一般步骤