【发布时间】:2019-08-20 20:33:53
【问题描述】:
大家好,所以我正在尝试在 nodejs 中发出这种类型的请求。我假设您可以使用 multer 来完成,但有一个主要问题我不想下载文件或从表单上传它我想直接从 s3 中提取它,获取对象并将其作为文件连同其他数据到我的路线。有可能吗?
【问题讨论】:
大家好,所以我正在尝试在 nodejs 中发出这种类型的请求。我假设您可以使用 multer 来完成,但有一个主要问题我不想下载文件或从表单上传它我想直接从 s3 中提取它,获取对象并将其作为文件连同其他数据到我的路线。有可能吗?
【问题讨论】:
是的,这完全有可能。假设您知道aws-sdk 的方法,您可以创建一个检索文件的方法,并使用此方法获取您的路线中的数据,并随心所欲地使用它们。
示例:(辅助方法)
getDataFromS3(filename, bucket, callback) {
var params = {
Bucket: bucket,
Key: filename
};
s3.getObject(params, function(err, data) {
if (err) {
callback(true, err.stack); // an error occurred
}
else {
callback(false, data); //success in retrieving data.
}
});
}
您的路线:
app.post('/something', (req, res) => {
var s3Object = getDataFromS3('filename', 'bucket', (err, file) => {
if(err) {
return res.json({ message: 'File retrieval failed' });
}
var routeProperties = {};
routeProperties.file = file;
routeProperties.someOtherdata = req.body.someOtherData;
return res.json({routeProperties});
});
});
当然,代码可能并不完全正确。但这是一种你可以用来得到你想要的东西的方法。希望这会有所帮助。
【讨论】:
res.json({ routeProperties }) 将对象作为路由的响应发送。
我在这里看到了两种方式,你可以:
这里有一个非常相似的问题:Streaming file from S3 with Express including information on length and filetype
我只是复制和粘贴代码 sn-p 仅供参考如何完成
function sendResponseStream(req, res){
const s3 = new AWS.S3();
s3.getObject({Bucket: myBucket, Key: myFile})
.createReadStream()
.pipe(res);
}
【讨论】: