无法在 AWS S3 存储桶上设置文件对象的到期时间

问题描述

我在使用 AWS SDK 将 FileInputStream 上传到 S3 存储桶时将到期时间设置为 30 分钟,但该文件在 30 分钟后未被删除。我什至在第二天上午 12:00 尝试,认为队列可能在晚上刷新,但仍然可以通过 url 访问该文件。我什至尝试在隐身模式下确保没有缓存被返回。我无法更改存储桶配置,并且没有为存储桶的到期定义生命周期。我可以为到期设置的最短时间是多少,为什么是 30 分钟不工作。

    ObjectMetadata data = new ObjectMetadata();
    data.setCacheControl("no-cache");
    data.setExpirationTime(Date.from(Instant.Now().plus(30,ChronoUnit.MINUTES)));
PutObjectRequest r = new PutObjectRequest(bucket,file,fileInputStream,data);
awsSdkClient.putObject(r);

解决方法

https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/model/ObjectMetadata.html#setExpirationTime-java.util.Date-

仅供内部使用。这将设置对象的过期时间,仅用于在收到来自 S3 的响应中的值后设置对象中的值。

此外,不支持手动设置对象过期时间。对象过期仅在生命周期规则中可用。