您的位置:首页 > Web前端 > Node.js

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字节的问题确实解决了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: