数字海洋空间 |使用 s3cmd 添加文件的到期日期



我尝试将过期天数添加到文件和存储桶中,但我遇到了这个问题:

sudo s3cmd expire s3://<my-bucket>/ --expiry-days=3 expiry-prefix=backup

错误:解析 xml 时出错:语法错误:第 1 行,第 0 列错误:未找到错误:S3 错误:404(未找到)

而这个

sudo s3cmd expire s3://<my-bucket>/<folder>/<file> --expiry-day=3

错误:参数问题:预期 S3 URI 仅设置存储桶名称而不是"s3:////"

如何使用s3cmd在DO空间中为文件夹或文件添加到期日?

考虑配置存储桶的生命周期规则

生命周期

规则可用于在空间中的对象在其"生命周期"期间对其执行不同的操作。例如,可以将空间配置为其中的对象过期并在一定时间长度后自动删除。

要配置新的生命周期规则,请向${BUCKET}.${REGION}.digitaloceanspaces.com/?lifecycle发送PUT请求

请求正文应包含一个名为 LifecycleConfiguration 的 XML 元素,其中包含Rule对象列表。

https://developers.digitalocean.com/documentation/spaces/#get-bucket-lifecycle

expire选项未在数字海洋空间上实现

感谢 Vitalii 的回答指向 API。

但是,API 并不是很容易使用,所以我通过 NodeJS 脚本完成了它。

首先,在此处生成您的 API 密钥:https://cloud.digitalocean.com/account/api/tokens

并将它们放入~/.aws/credentials文件中(根据文档):

[default]
aws_access_key_id=your_access_key
aws_secret_access_key=your_secret_key

现在创建空的 NodeJS 项目,运行npm install aws-sdk并使用以下脚本:

const aws = require('aws-sdk');
// Replace with your region endpoint, nyc1.digitaloceanspaces.com for example
const spacesEndpoint = new aws.Endpoint('fra1.digitaloceanspaces.com');
// Replace with your bucket name
const bucketName = 'myHeckingBucket';
const s3 = new aws.S3({endpoint: spacesEndpoint});
s3.putBucketLifecycleConfiguration({
    Bucket: bucketName,
    LifecycleConfiguration: {
        Rules: [{
            ID: "autodelete_rule",
            Expiration: {Days: 30},
            Status: "Enabled",
            Prefix: '/', // Unlike AWS in DO this parameter is required
        }]
    }
}, function (error, data) {
    if (error) 
        console.error(error);
    else
        console.log("Successfully modified bucket lifecycle!");
});

最新更新