NodeJS 如何在AWS lambda代码中为S3指定目录、权限并创建子目录?

myss37ts  于 2023-05-28  发布在  Node.js
关注(0)|答案(2)|浏览(212)

我正在实现AWS lambda函数
(JavaScript,node.js环境)
它使用了一个类似这样的调用:

const aws = require('aws-sdk');

const s3  = new aws.S3();

function work1(obj, cb_Work1) {
    console.log(">>> Calling work");

    s3.putObject({
        Bucket: bucketName,
        Key: 'test.txt',
        Body: JSON.stringify(obj)
    })
    .promise()
    .then(() => {
        console.log('S3 -> UPLOAD SUCCESS');
        work2(obj, (resp) => {
            cb_Work1(resp);
        });
    })

    .catch(e => {
        console.log('S3 -> UPLOAD ERROR');
        console.log(e);
        cb_Work1({
            error: e
        });
    });

}

所以这里Key似乎是文件名。
但问题是我还没有找到s3.putObject的详细文档,所以我不知道
1)如何指定目录名(而不仅仅是存储桶名),
2)如何定义正在创建文件的权限
3)如何创建一个子目录之前,把文件,等等,等等。
如何通过aws-sdk(从JavaScript,node.js代码)完成这些事情?
非常感谢。

b5buobof

b5buobof1#

如S3文档here所述:
Amazon S3控制台将所有在键名中以正斜杠“/”字符作为最后一个(尾随)字符的对象视为文件夹,例如examplekeyname/。您无法使用Amazon S3控制台上传键名末尾带有“/”字符的对象。但是,可以使用AWS CLI、AWS SDK或REST API通过Amazon S3 API上传以结尾“/”命名的对象。
对于权限,API提供了 putObjectAcl 函数,允许定义放置对象时使用的ACL。

mw3dktmi

mw3dktmi2#

Key(文件名)包含对象的完整路径,例如:

folder1/folder2/test.txt

所以,如果你想上传到一个特定的文件夹,只需在Key中包含完整的路径,它就会工作。

Key: 'folder1/folder2/test.txt',

您可以将其复制到不存在的文件夹中,系统将为您创建该文件夹。然后,如果您删除对象,文件夹将被删除,因为它实际上从未存在!

相关问题