我正在做这个
gm(jpgName).setFormat('jpg')
.resize(160,158)
.compress('JPEG')
.write(fs.createWriteStream(jpgName),function(err){
if(err){
console.log(err,jpgName);
res.send(400);
}else{
console.log('file formated to jpg' + jpgName);
我得到
{ [Error: Command failed: gm convert: Empty input file (/home/ubuntu/node/uploads/icon.jpg). ] code: 1, signal: null }
如果我在这里写的第一行之前停止代码,然后查看文件,它有一个文件长度。如果我让这个过程发生(出错)然后查看文件,那么它的大小为 0 字节。
我也试过这个:
fs.stat(jpgName, function (err, stats) {
console.log('file size:',stats.size);
gm(jpgName).setFormat('jpg')
.resize(160,158)
.compress('JPEG')
.write(fs.createWriteStream(jpgName),function(err){
if(err){
console.log('console.log error writing jpg file',err,jpgName);
fs.unlink(jpgName);
callback(400);
return;
}else{//...
我得到了一个文件大小,所以在我开始这个过程之前我知道它不是空的。
编辑:我现在开始这个过程,form.on('end')
所以我可以确定整个上传过程已经完成。
整个功能:
function formatProfileImage(req,form,file,callback){
console.log('formatting profile image');
var ext = file.name.split('.')[1].toLowerCase();
var name = encodeURIComponent(file.name.split('.')[0].toLowerCase());
var smallName = form.uploadDir+"/"+"small_"+name+".jpg";
var jpgName = form.uploadDir + "/" + name+'.jpg';
console.log('extension:',ext);
console.log('name:',name);
console.log('smallName:',smallName);
console.log('jpgName:',jpgName);
if(!(ext == "png" || ext == "jpeg"|| ext == "jpg"|| ext == "gif")){
fs.unlink(file.path);
console.log("extension rejected");
callback(415);
return;
}
console.log('renaming file from ' + file.path + ' to ' + jpgName);
fs.rename(file.path,jpgName,function(err){
if(err){
console.log('error renaming file',err);
callback(400);
return;
}
console.log('file renamed');
fs.stat(jpgName, function (err, stats) {
console.log('file size:',stats.size);
if(!(typeof req.query.tenant === 'undefined')){
//rename to jpg
gm(jpgName).setFormat('jpg')
.resize(160,158)
.compress('JPEG')
.write(fs.createWriteStream(jpgName),function(err){
if(err){
console.log('console.log error writing jpg file',err,jpgName);
fs.unlink(jpgName);
callback(400);
return;
}else{
console.log('file formated to jpg' + jpgName);
//make "thumbnail"
gm(jpgName).setFormat('jpg')
.resize(50)
.write(fs.createWriteStream(smallName),function(err){
if(err){
fs.unlink(smallName);
console.log('error writing thumbnail',err,smallName);
callback(400);
return;
}else{
console.log('thumbnail created' + smallName);
//upload everything
uploadS3(jpgName,req.query.tenant,function(back){
if(back.success){
console.log('success ' +back.url);
callback(back.url);
fs.unlink(jpgName);
}else{
console.log('error uploading' + jpgName, back);
callback(400);
fs.unlink(jpgName);
return;
}
});
uploadS3(smallName,req.query.tenant,function(back){
if(back.success){
console.log('success ' +back.url);
fs.unlink(smallName);
}else{
console.log('error uploading ' + smallName, back);
callback(400);
fs.unlink(smallName);
return;
}
});
}
});
}
});
}
});
});
}