用于Node.js的AWS S3 SDK V3-GetObjectCommand v/s getSignedUrl [英] AWS S3 SDK V3 for Node.js - GetObjectCommand v/s getSignedUrl

查看:34
本文介绍了用于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构建我的服务器。

我的问题-

  1. 有没有比使用SDK更简单的APP与S3交互方式?我所说的更容易,只是指有充分的文档记录。
  2. 我看错文档了吗?是否有其他资源可以简化此操作?
  3. 在哪些情况下会使用getSignedUrl而不是GetObjectCommand来读取并呈现Web应用的存储文件?

我将非常感谢您的任何帮助。

推荐答案

  1. 请参阅对问题2的答复。
  2. https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/s3-example-creating-buckets.html-文档可能更适合初学者
  3. 取决于您的用例。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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆