我尝试将过期天数添加到文件和存储桶中,但我遇到了这个问题:
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!");
});