Node.js 如何使用节点js将图像从s3.getObject(params.createReadStream()输出到HTML
我一直在尝试使用multer将一个图像上传到s3,并使用下面的代码成功地将其下载到本地路径Node.js 如何使用节点js将图像从s3.getObject(params.createReadStream()输出到HTML,node.js,express,amazon-s3,filesystems,Node.js,Express,Amazon S3,Filesystems,我一直在尝试使用multer将一个图像上传到s3,并使用下面的代码成功地将其下载到本地路径 routes.post('/updownload', upload.array('file'), function (req, res) { var params = { Bucket: "*******", Key: "image1.jpeg" }; var file = fs.createWriteStream('./uplo
routes.post('/updownload', upload.array('file'), function (req, res) {
var params = {
Bucket: "*******",
Key: "image1.jpeg"
};
var file = fs.createWriteStream('./uploads/file4.jpeg');
s3.getObject(params)
.createReadStream()
.on('error', function (err) {
console.log('Error reading file: ' + err.message);
file.end();
})
.pipe(file)
.on('error', function (err) {
err = true;
console.log('Error writing file:' + error.message);
file.end();
})
.on('finish', function (err) {
file.end();
if (!err) {
console.log('Successfully downloaded file from S3');
}
});
});
但是,我不确定,如何根据下载图像的成功/失败,使用诸如标题、正文、内容类型、状态代码和状态消息等参数将响应发送回HTML。
如果我走的是正确的道路,请帮助我并让我知道
在向客户机发送响应之前,您需要完全等待来自S3的事件发射器完全完成。
获得数据后,需要将可读流转换为缓冲区,并根据下载的文件确定ContentType并使用:res.sendBuffer:
另请参见我知道,回答这个问题已经有相当长的时间了。但是我想,这会帮助一些人。我能够通过以下代码解决问题:
const params = {
Bucket: '*********',
Key: image1.jpeg,
};
res.set('Content-Type', 'image/jpeg');
res.set('Content-Type', 'image/jpg');
res.set('Content-Type', 'image/png');
const stream = s3.getObject(params).createReadStream();
stream.on('error', err => {
logger.log({ level: 'error', messsage: 'stream error', error: `${err}` });
});
stream.pipe(res);
基于您的第一点,我可以处理发送给客户端的响应。在'finish'上,函数err{}对吗?如何获取数据?或者有没有更好的方法直接从s3读取文件并在前端显示?您需要查看s3 SDK的文档。我没用过它,所以我不能给出确切的答案。简而言之,上面的答案就是你需要做的。