lambdaはちょっとした作業をするのにすごく便利なもののわけで。
特にAPI Gatewayと組み合わせ、CORSもさせるとそれはもう大体のことはクライアントサイドでできるわけで。
けどまぁ色々なことを考慮すると普通にサーバサイドを使う方が早いんだけども。
ただそんなことは言わず、とりあえず画像加工をlambdaに任せようかと。
で、そのときにgmを使うわけなんだけども「Stream yields empty buffer」というエラーがでてしまった。
ということで今日はそれを解決するには的なお話をば。
結論から言うと、toBufferが原因で「Stream yields empty buffer lambda gm」が出ていた。
ということでこれを使わずに違う方法で書き出すには、streamを使いましょう的な。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
gm(imageBuffer.data).size(function(err,size){ | |
var w = 1200; | |
var h = 630; | |
if(err){ | |
console.log("gm error") | |
context.fail(err); | |
} | |
this.background("#ffffff").resize(w,h).gravity("Center").extent(w,h).stream(function(err,stdout,stderr){ | |
if(err){ | |
console.log("gm process error"); | |
console.log(err,stdout,stderr) | |
context.fail(err); | |
} | |
var chunks = []; | |
stdout.on('data',function(chunk){ | |
chunks.push(chunk); | |
}); | |
stdout.on('end',function(){ | |
var buffer = Buffer.concat(chunks); | |
var params = { | |
Bucket: BUCKET_NAME, | |
Key: "hoge/hoge.png", | |
ACL: 'public-read', | |
ContentType: imageBuffer.type, | |
Body: buffer | |
}; | |
s3.putObject(params, function(err, data) { | |
if(err){ | |
console.log("gm upload error"); | |
context.fail(err); | |
} | |
context.succeed({ | |
"error":false | |
}); | |
}); | |
}); | |
stderr.on('data',function(data){ | |
console.log(`stderr ${size} data:`, data); | |
}) | |
}); | |
}); |
面倒だから諸々省略しているけど、gm部分はこのような感じになる。
lambdaは便利なんだけど、たまにこういうことがあるわけで。
なので他の方法もちゃんと使えるようにしておきましょう的なみたいな。
0 件のコメント:
コメントを投稿