【问题标题】:How to set TTL on a Blob in Google Cloud Storage using Java?如何使用 Java 在 Google Cloud Storage 中的 Blob 上设置 TTL?
【发布时间】:2018-01-18 01:30:30
【问题描述】:

使用 Java,是否可以在 Google Cloud Storage 中创建的 blob 上设置生存时间 (TTL)?

我不想在 Bucket 上设置 TTL - 只在 Bucket 中的项目上。

例如,在创建日期后 14 天,我希望删除存储在特定存储桶中的所有文件。

以下是我如何创建 Blob 的示例: WriteChannel writer = storage.writer(BlobInfo.newBuilder(blobId).setContentType("application/json").build());

我正在寻找一种在创建时设置 TTL 的方法,但未能找到解决方案。请指教

【问题讨论】:

  • Google Cloud Storage 使用对象生命周期管理功能来控制对象的生存时间 (TTL)、归档旧版本的对象或“降级”对象的存储类别以帮助管理成本。考虑给定的解决方案链接。我希望它会帮助你。 cloud.google.com/storage/docs/lifecycle

标签: java blob google-cloud-storage


【解决方案1】:

目前无法设置每个对象的 TTL,您只能通过设置存储桶生命周期配置来配置适用于存储桶中所有对象的存储桶范围 TTL。 https://cloud.google.com/storage/docs/lifecycle

通过 LifeCycle 在存储桶上设置 14 天的 TTL 不会导致存储桶本身在 14 天后被删除,而是会导致上传到该存储桶的每个对象在创建后 14 天被删除。

【讨论】:

  • 在文档中我不清楚它只会删除存储桶中的对象而不是存储桶本身,因此我对其进行了测试并且它有效!对于任何想知道的人,您可以在控制台中启用现有存储桶的生命周期:存储 > 浏览器或通过 gsutl: 1. 创建 JSON 生命周期策略文件 - 例如创建文件名 life.json: { "rule": [ { "action": {"type": "Delete"}, "condition": {"age": 14} } ] } 2. 设置策略:gsutil生命周期设置 life.json gs://[BUCKET_NAME]
【解决方案2】:

您可以通过在存储桶生命周期配置中使用 DaysSinceCustomTime 规则来做到这一点: https://cloud.google.com/storage/docs/lifecycle#dayssincecustomtime

blob.custom_time = pd.Timestamp('now', tz='UTC') + pd.offsets.Second(ttl)
#blob.patch()
blob.update() # they seem to have a bug with the custom_time setter, so using .update() instead of .patch()

如果您这样做并且 DaysSinceCustomTime 将设置为例如 1 天,则该对象将在 ttl + 1 天后被删除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-08
    • 1970-01-01
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    相关资源
    最近更新 更多