我用的是 nodejs gm 。 服务器是 linux 装了imagemagick throw err; ^ Error: Command failed: at ChildProcess._spawn.proc.on.onExit (/home/hosting_users/quanchengji/apps/quanchengji_shawn/node_modules/gm/lib/command.js:279:17) at ChildProcess.EventEmitter.emit (events.js:98:17) at maybeClose (child_process.js:735:16) at Process.ChildProcess._handle.onexit (child_process.js:802:5)
而且 出这个错时 有时 还会 重起node 。。 请高手 帮忙。
var filePath = req.files.photo.path, imageName = req.files.photo.name , basePath = path.join(rootDir, ‘/public/uploads/user/’ + id), baseThumbPath = basePath + '/thumbs’; fs.readFile(filePath, function (err, data) { //
if(err){
console.log("There was an error")
}
if(!imageName){
console.log("There was an error")
}else{
if (!fs.existsSync(basePath)) fs.mkdirSync(basePath);
var newPath = basePath + '/' + imageName;
fs.writeFile(newPath, data, function (err) {
if (!fs.existsSync(baseThumbPath)) fs.mkdirSync(baseThumbPath);
var thumbPath = baseThumbPath + '/' + imageName;
//执行到 这里 上传原文件是 没任何问题
//就是 执行到 下面 gm部分时 有10次有2~3次失败的
gm(newPath).options({imageMagick: true}).resize(120, 120).noProfile().write(thumbPath, function (err) {
if (!err) {
console.log('done');
}else{
throw err;
}
});
});
}
}); 服务器是 linux , node.js 0.10.21 , imagemagick ,gm (从ng-cordova 上传的 相片) 一开始是 使用了 imagemagick wrapper 也出这个错误 后来 换了 gm 不过同样 出现 相同错误。请高手 帮忙 谢谢。
@quanchunlin 我使用的方式: var gm = require(‘gm’), im = gm.subClass({ imageMagick:true }); im(原图路径).resize(size1,size2).autoOrient().write(新图路径地址,function(err) { … })
这个 方式 我试过了不过还是 出一样错 错误。 所以 我 现在 我又换了 。 gm(filePath).stream('JPG’, function (err, stdout, stderr) {
var writeStream = fs.createWriteStream(newPath); stdout.pipe(writeStream);
writeStream.on('close’, function () { return cb(null , {photo:imageName}); }); }); 这样 不出 error 可是 偶尔会出现 空白图 。 resize是在 使用 image 服务器的方式 gm(rootImgPath).resize(150, 150).toBuffer('JPG’,function (err, buffer) { if(err){ throw err; //return res.sendfile(rootDir + config.defaultImagePath ); } var imageName = imgPath.substr(imgPath.lastIndexOf(‘/’)+1); var ext = imageName.split(‘.’);
res.set('Content-Type', contentType(ext[1]));
res.send(buffer);
});
使用 toBuffer 读取。如图没问题 也会偶尔出错 或者 空白图 也会出 [Error: Stream yields empty buffer] 这个错 。
实在没办法了。。 都10天了。。这个会不会是 hosting里的 原因阿?请高手 帮忙