我需要使用 Node.js 和 Express.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,file-saver v2.0.5
感谢您的提示和建议!任何帮助都将不胜感激。
/api/getfile/xyz.jpg
,然后你响应一个302重定向到S3预签名URL。除此之外,使用Express res.sendFile()有什么问题吗?使用AWS SDK将文件下载到Web服务器,然后从下载位置提供服务。这对你不起作用吗? - jarmod