Node.js 如何在从s3提取文件的节点中发出表单数据请求
大家好,我正试图在nodejs中提出这种类型的请求。我想你可以用multer来做,但有一个主要问题我不想下载文件或从表单上传,我想直接从s3中提取,获取对象并将其作为文件与其他数据一起发送到我的路由。可以这样做吗?我在这里看到两种方法,您可以:Node.js 如何在从s3提取文件的节点中发出表单数据请求,node.js,amazon-s3,multer,Node.js,Amazon S3,Multer,大家好,我正试图在nodejs中提出这种类型的请求。我想你可以用multer来做,但有一个主要问题我不想下载文件或从表单上传,我想直接从s3中提取,获取对象并将其作为文件与其他数据一起发送到我的路由。可以这样做吗?我在这里看到两种方法,您可以: 通过管道将此请求传递给用户,这意味着您仍然可以下载并传递它,但您不会将其保存在任何地方,只需通过后端将其流式传输 这里有一个非常类似的问题: 我将复制并粘贴代码片段,仅供参考 function sendResponseStream(req, res)
- 通过管道将此请求传递给用户,这意味着您仍然可以下载并传递它,但您不会将其保存在任何地方,只需通过后端将其流式传输
function sendResponseStream(req, res){
const s3 = new AWS.S3();
s3.getObject({Bucket: myBucket, Key: myFile})
.createReadStream()
.pipe(res);
}
- 如果文件太大,您无法轻松处理,请在S3中创建预先签名的URL并发送。然后,用户可以在有限的时间内直接从S3下载该文件,详情如下:
是的,这是完全可能的。假设您了解aws sdk的使用方法,您可以创建一个检索文件的方法,并使用此方法获取路由中的数据,并对其执行任何您喜欢的操作 示例:(助手方法) 您的路线:
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});
});
});
当然,代码可能并不完全正确。但这是一种你可以用来得到你想要的东西的方法。希望这能有所帮助。我可以将其放入async Wait中吗?一旦我得到数据,我如何实际从路由发送它?是的,您可以将其转换为返回承诺,而不是回调函数。但这完全是另一回事。在路由中执行此函数后,在函数的回调中,可以获得代码中提到的数据。如果在获取else时出错,则返回一个错误创建一个空对象,将属性附加到该对象,并使用
res.json({routeProperties})从路由以响应的形式发送该对象
。你能给我一个例子,说明你如何获得文件,然后按照邮递员路线图中所示的格式通过邮递路线发送文件吗W,不。我已经向你展示了方法,其余的由你决定。这是你唯一可以学习的方法。Stackoverlow是一个社区的人谁可以告诉你一个方法,而不是为你写整个代码。
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});
});
});