gpt4 book ai didi

javascript - 文件从 AWS S3 检索到 Node.js 服务器,然后到 React 客户端

转载 作者:行者123 更新时间:2023-12-05 03:43:29 25 4
gpt4 key购买 nike

我需要使用 Express.js 从 Node.js 检索单个文件。为此,我安装了 aws-sdk 以及 @aws-sdk/client-s3。我能够使用这个简单的端点成功获取文件:

const app = express(),
{ S3Client, GetObjectCommand } = require('@aws-sdk/client-s3'),
s3 = new S3Client({ region: process.env.AWS_REGION });

app.get('/file/:filePath', async (req,res) => {
const path_to_file = req.params.filePath;

try {
const data = await s3.send(new GetObjectCommand({ Bucket: process.env.AWS_BUCKET, Key: path_to_file }));
console.log("Success", data);
} catch (err) {
console.log("Error", err);
}
});

...但我不知道如何将 data 正确返回到 React.js 前端,以便可以进一步下载文件。我试图查找文档,但它对我来说太乱了,我什至无法了解函数返回的内容。 .toString() 方法没有帮助,因为它只返回“[object Object]”,没有别的。

在 React 上,我使用了一个库 file-saver,它与 blob 一起工作,并使用用户定义的文件名提供它们以供下载。

Node v15.8.0、React v16.4.0、@aws-sdk/client-s3 v3.9.0、文件保护器 v2.0.5

感谢您的提示和建议!非常感谢任何帮助。

最佳答案

通常来自 S3 的数据作为缓冲区返回。文件内容是响应中 Body 参数的一部分。您可能正在对根对象执行 toString

您需要在 body 参数上使用 .toString() 使其成为字符串。

这是一些可能适用于用例的示例代码

// Note: I am not using a different style of import
const AWS = require("aws-sdk")
const s3 = new AWS.S3()

const Bucket = "my-bucket"

async getObject(key){
const data = await s3.getObject({ Bucket, key}).promise()
if (data.Body) {return data.Body.toString("utf-8") } else { return undefined}
}

要在 express 中返回它,您可以将它添加到您的 route ,并在获得最终数据后将其传回。

res.end(data));

在 React 中使用它应该与从任何其他 REST API 中获取值相同。

关于javascript - 文件从 AWS S3 检索到 Node.js 服务器,然后到 React 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66779730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com