如何使用 Nodejs API 在 DigitalOcean Bucket 中创建文件夹?

How to create folders in the DigitalOcean Bucket using Nodejs API?

我正在尝试使用 Nodejs 将我的数据存储到 DigitalOcean。我可以执行列表、上传、下载操作。但是谁能告诉我如何使用 API.

在存储桶中创建文件夹

关于 Spaces 和 S3 API(Spaces 被设计为可互操作)的一件重要事情是 "folder" 是实际上只是一个 "key" 大小为零的 "object." 文件夹内的项目将文件夹密钥作为其自身密钥的前缀。例如,这里是一个 Space 中的对象列表,其中一个名为 foo 的文件夹包含一个名为 bar:

的文件
$ aws s3api --endpoint-url https://nyc3.digitaloceanspaces.com --profile do list-objects --bucket my-bucket
{
    "Contents": [
        {
            "LastModified": "2017-10-17T17:50:50.840Z", 
            "ETag": "\"d41d8cd98f00b204e9800998ecf8427e\"", 
            "StorageClass": "STANDARD", 
            "Key": "foo/", 
            "Owner": {
                "DisplayName": "681451698", 
                "ID": "681451698"
            }, 
            "Size": 0
        }, 
        {
            "LastModified": "2017-10-17T17:56:08.583Z", 
            "ETag": "\"8cf8463b34caa8ac871a52d5dd7ad1ef\"", 
            "StorageClass": "STANDARD", 
            "Key": "foo/bar", 
            "Owner": {
                "DisplayName": "681451698", 
                "ID": "681451698"
            }, 
            "Size": 2
        }
    ]
}

因此您根本不需要创建文件夹。您可以只上传一个带有 path/to/file.ext 之类的键的对象 如果您希望空 "folder" 在 DigitalOcean Spaces 的控制面板中可见,您可以 "upload" 一个空的具有以尾部正斜杠 (/) 结尾的键的对象。例如:

const AWS = require('aws-sdk')

const spacesEndpoint = new AWS.Endpoint('sfo2.digitaloceanspaces.com'); // Replace with the endpoint for your region.
const s3 = new AWS.S3({
    endpoint: spacesEndpoint,
    accessKeyId: 'ACCESS_KEY',
    secretAccessKey: 'SECRET_KEY'
});

var params = {
    Bucket: "my-spaces-bucket",
    Key: "folder/",
};

s3.putObject(params, function(err, data) {
    if (err) console.log(err, err.stack);
    else     console.log(data);
});