用于Node.js的AWS S3 SDK V3-GetObjectCommand v/s getSignedUrl [英] AWS S3 SDK V3 for Node.js - GetObjectCommand v/s getSignedUrl
本文介绍了用于Node.js的AWS S3 SDK V3-GetObjectCommand v/s getSignedUrl的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在构建一个Web应用程序,在其中我需要让用户将文档上传到他们的帐户,还可以阅读他们上传的所有文档。此外,我想让用户也能够上传个人资料照片。要处理文件存储,我选择了AWS S3。
然而,我在使用SDK(V3)时遇到了很多问题。请记住,我从未使用过以前的版本(V2)。我通过npm安装了2个包,@aws-sdk/client-s3和@aws-sdk/s3-request-presigner
。我很难找到我需要的所有功能的适当文档。我遇到的docs对初学者不太友好,没有详细解释所有的功能。例如,在GetObjectCommand
的情况下,我能够获得响应,但我不确定如何实际进入正文并使用内容。
我也不确定我的用例应该使用GetObjectCommand
还是getSignedUrl
。作为背景,我正在使用Express构建我的服务器。
我的问题-
- 有没有比使用SDK更简单的APP与S3交互方式?我所说的更容易,只是指有充分的文档记录。
- 我看错文档了吗?是否有其他资源可以简化此操作?
- 在哪些情况下会使用
getSignedUrl
而不是GetObjectCommand
来读取并呈现Web应用的存储文件?
我将非常感谢您的任何帮助。
推荐答案
- 请参阅对问题2的答复。
- https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/s3-example-creating-buckets.html-文档可能更适合初学者
- 取决于您的用例。GetObjectCommand是最简单的方法,但很可能会遇到许可问题。预签名URL是您可以提供给用户以授予对特定S3对象的临时访问权限的URL。
以下是使用getSignedUrl
的GetObjectCommand的代码(我还更新了文档。)
const {
S3,
CreateBucketCommand,
PutObjectCommand,
GetObjectCommand,
DeleteObjectCommand,
DeleteBucketCommand,
} = require("@aws-sdk/client-s3");
const { getSignedUrl } = require("@aws-sdk/s3-request-presigner");
const fetch = require("node-fetch");
// Set parameters
// Create random names for the Amazon Simple Storage Service (Amazon S3) bucket and key.
const params = {
Bucket: `test-bucket-${Math.ceil(Math.random() * 10 ** 10)}`,
Key: `test-object-${Math.ceil(Math.random() * 10 ** 10)}`,
Body: "BODY",
Region: "REGION"
};
// Create an Amazon S3 client object.
const s3Client = new S3({ region: params.Region });
const run = async () => {
// Create an Amazon S3 bucket.
try {
console.log(`Creating bucket ${params.Bucket}`);
const data = await s3Client.send(
new CreateBucketCommand({ Bucket: params.Bucket })
);
console.log(`Waiting for "${params.Bucket}" bucket creation...
`);
} catch (err) {
console.log("Error creating bucket", err);
}
// Put the object in the Amazon S3 bucket.
try {
console.log(`Putting object "${params.Key}" in bucket`);
const data = await s3Client.send(
new PutObjectCommand({
Bucket: params.Bucket,
Key: params.Key,
Body: params.Body,
})
);
} catch (err) {
console.log("Error putting object", err);
}
// Create a presigned URL.
try {
// Create the command.
const command = new GetObjectCommand(params);
// Create the presigned URL.
const signedUrl = await getSignedUrl(s3Client, command, {
expiresIn: 3600,
});
console.log(
`
Getting "${params.Key}" using signedUrl with body "${params.Body}" in v3`
);
console.log(signedUrl);
const response = await fetch(signedUrl);
console.log(
`
Response returned by signed URL: ${await response.text()}
`
);
}
catch (err) {
console.log("Error creating presigned URL", err);
}
};
run();
这篇关于用于Node.js的AWS S3 SDK V3-GetObjectCommand v/s getSignedUrl的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文