我正在构建一个网络应用程序,我需要让用户将文档上传到他们的帐户并阅读他们上传的所有文档。此外,我还希望允许用户上传个人资料照片。为了处理文件存储,我选择了 AWS S3。
但是,我在使用 SDK (v3) 时遇到了很多麻烦。请记住,我从未使用过以前的版本 (v2)。我通过 npm 安装了 2 个包,@aws-sdk/client-s3和 @aws-sdk/s3-request-presigner
.我无法为我需要的所有功能找到合适的文档。 docs我遇到的不是完全适合初学者的,也没有详细解释所有功能。例如,在 GetObjectCommand
的情况下,我能够得到回应,但我不确定如何实际进入正文并使用内容。
我也不确定是否应该使用 GetObjectCommand
或 getSignedUrl
对于我的用例。对于上下文,我使用 Express 来构建我的服务器。
我的问题——
getSignedUrl
在 GetObjectCommand
读取然后呈现 Web 应用程序的存储文件? 我将非常感谢任何和所有帮助。
最佳答案
这是使用
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...\n`);
} 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(
`\nGetting "${params.Key}" using signedUrl with body "${params.Body}" in v3`
);
console.log(signedUrl);
const response = await fetch(signedUrl);
console.log(
`\nResponse returned by signed URL: ${await response.text()}\n`
);
}
catch (err) {
console.log("Error creating presigned URL", err);
}
};
run();
关于node.js - 适用于 Node.js 的 AWS S3 SDK V3 - GetObjectCommand v/s getSignedUrl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66120548/