17
我正在写从URL下载图像的应用程序,然后将其上传到使用aws-sdk的S3桶。文件,并将其上传到AWS S3没有保存 - Node.js的
Perviously我只是下载图像,并将它们保存到磁盘这样。
request.head(url, function(err, res, body){
request(url).pipe(fs.createWriteStream(image_path));
});
然后上传图像到AWS S3这样
fs.readFile(image_path, function(err, data){
s3.client.putObject({
Bucket: 'myBucket',
Key: image_path,
Body: data
ACL:'public-read'
}, function(err, resp) {
if(err){
console.log("error in s3 put object cb");
} else {
console.log(resp);
console.log("successfully added image to s3");
}
});
});
但我想跳过部分,我将图像保存到磁盘。有没有办法我可以pipe
从request(url)
到一个变量的响应然后上传呢?
书面的代码加载整个身体成内存一次(作为一个字符串进入“body”变量)。也就是说,这不会直接从请求流到S3。 OTOH,如果“编码”为空,请求将为“body”创建一个Buffer对象;请参阅https://github.com/request/request#requestoptions-callback。我建议编辑这个答案,将'encoding:'binary''更改为'encoding:null'并消除'body = new Buffer(body,'binary')'。这将消除将整个“身体”存储在记忆中的需要,我认为这符合原始问题和答案。但评论想评论... –
我想你的做法,都与隐性和显性编码,我发现我上传的PNG文件损坏,由于某种原因,无法找出原因。试图复制这一形象https://openclipart.org/image/250px/svg_to_png/264091/MirrorCarp.png,这就是我得到我斗http://images.quickhunts.com/clipart/23234234234.png –
@ Ilanlewin它绝对与'png'图像一起工作,但要确保正确执行'fs.readFile'。从我最初写这个答案开始,它可能已经发生了变化,您可能需要更加具体地使用编码。也可能尝试一些'JPG'或其他通用图像。 – Loourr