我一直在尝试使用multer将图像上传到s3并使用以下代码将其成功下载到本地路径。
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');
}
});
});
但是,我不确定,如何根据图像下载的成功/失败,使用Headers,Body,Content-Type,状态代码和状态消息等参数将响应发送回HTML。
如果我走的是正确的道路,请帮助并告诉我。
答案 0 :(得分:0)
Buffer
并从您下载的文件中确定ContentType
并使用:{{1 }:http://expressjs.com/en/api.html#res.send 答案 1 :(得分:0)
我知道,回答这个问题已经很长时间了。但以为,这会帮助某人。我可以通过以下代码解决此问题:
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);