Java 如何确定对S3的PUT请求是否正在创建或覆盖项?

Java 如何确定对S3的PUT请求是否正在创建或覆盖项?,java,amazon-web-services,amazon-s3,put,Java,Amazon Web Services,Amazon S3,Put,使用,我试图确定PUT请求是否会导致创建新对象或更新现有对象,而无需进行第二次REST API调用 我最初的想法是看看是否返回了不同的状态码。不幸的是,我没有看到从PutObjectResult访问HTTP响应状态代码的方法 在查看SDK文档时,我发现了ObjectMetadata.getLastModified()。不幸的是,每次我使用它时,它都返回null 这是我用来解决此问题的代码: import com.amazonaws.AmazonServiceException; import c

使用,我试图确定PUT请求是否会导致创建新对象或更新现有对象,而无需进行第二次REST API调用

我最初的想法是看看是否返回了不同的状态码。不幸的是,我没有看到从
PutObjectResult
访问HTTP响应状态代码的方法

在查看SDK文档时,我发现了
ObjectMetadata.getLastModified()
。不幸的是,每次我使用它时,它都返回
null

这是我用来解决此问题的代码:

import com.amazonaws.AmazonServiceException;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.PutObjectResult;

public class Main {

    public static void main(String[] args) {
        AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
                .withRegion(Regions.US_EAST_1)
                .build();

        try {
            PutObjectResult result = s3Client.putObject("pail", "foo", "first");
            System.out.println(result.getMetadata().getLastModified());
        } catch (AmazonServiceException e) {
            System.out.println(e.getStatusCode() + " " + e.getErrorMessage());
        }
    }

}
在第一次PUT请求之后:

在第二次PUT请求之后:

对于上下文,我专门为此创建了一个bucket,带有默认设置,没有任何项目


知道为什么
getLastModified
返回
null
,甚至知道如何从
PutObjectResult
访问HTTP响应状态代码吗?

在上传之前,可以使用doesObjectExist()测试对象是否存在。我正在尝试在没有额外REST API调用的情况下进行区分。在生产中,我们从单个集群每秒执行约50000次播放。我们有不止一个集群。一个额外呼叫的开销相当于成本的大幅增加。我将更新问题以包含此细节。有趣的挑战。我怀疑您无法从PutObject结果中得到想要的结果,需要其他解决方案。我不知道你打算对新创建的对象和替换的对象做什么,所以很难提出有效的替代方案。是的,这很有意义。目前,我并不想采取不同的行动,而是想了解覆盖对象的次数。数据本身是不可变的,因此每次更新都是不必要的API调用/成本。现在我已经远离这个问题几个小时了,我想知道我是否可以从CloudFront获得这个信息。