gpt4 book ai didi

node.js - 适用于 Node.js 的 AWS S3 SDK V3 - GetObjectCommand v/s getSignedUrl

转载 作者:行者123 更新时间:2023-12-04 11:30:05 26 4
gpt4 key购买 nike

我正在构建一个网络应用程序,我需要让用户将文档上传到他们的帐户并阅读他们上传的所有文档。此外,我还希望允许用户上传个人资料照片。为了处理文件存储,我选择了 AWS S3。
但是,我在使用 SDK (v3) 时遇到了很多麻烦。请记住,我从未使用过以前的版本 (v2)。我通过 npm 安装了 2 个包,@aws-sdk/client-s3@aws-sdk/s3-request-presigner .我无法为我需要的所有功能找到合适的文档。 docs我遇到的不是完全适合初学者的,也没有详细解释所有功能。例如,在 GetObjectCommand 的情况下,我能够得到回应,但我不确定如何实际进入正文并使用内容。
我也不确定是否应该使用 GetObjectCommandgetSignedUrl对于我的用例。对于上下文,我使用 Express 来构建我的服务器。
我的问题——

  • 有没有比使用 SDK 更简单的方法来与 S3 进行交互?更容易我只是指正确记录。
  • 我在看错误的文档吗?是否有其他资源可以使这更简单?
  • 什么情况下会用到getSignedUrlGetObjectCommand读取然后呈现 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...\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/

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