Hitachi S3 API (HCP):使用 HTTP PUT 修改现有对象

Hitachi S3 API (HCP): Modify existing Object with HTTP PUT

我在我的 Java 应用程序中使用 AmazonS3 客户端将对象存储在我们的存储中,该存储来自 Hitachi,具有 S3 API。 putObject() 确实正确保存了对象,但是当我尝试使用相同的主体和对象 ID 修改 existinf 对象时,我得到了这个异常:

com.amazonaws.services.s3.model.AmazonS3Exception: Object already exists. (Service: Amazon S3; Status Code: 409; Error Code: OperationAborted; Request ID: 1622623300123; S3 Extended Request ID: ZzEwLXByaS5hZC5kcmd1ZWxkZW5lci5kZToxMDI=), S3 Extended Request ID: ZzEwLXByaS5hZC5kcmd1ZWxkZW5lci5kZToxMDI="

我的请求是这样的:

private PutObjectRequest buildPutObjectRequest(String id, StorageObject storageObject, String currentBucket) throws JsonProcessingException {
    ObjectWriter objectWriter = new ObjectMapper().writer().withDefaultPrettyPrinter();
    String json = objectWriter.writeValueAsString(storageObject);
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentLength(json.length());

    return new PutObjectRequest(currentBucket, id, new ByteArrayInputStream(json.getBytes()), metadata);
}

通常我希望使用 PUT 请求更新现有对象。文档告诉我,启用版本控制后,将创建一个副本,但这不是我想要做的。你们有解决办法吗?

启用版本控制确实是我们发现在 HCP 上“覆盖”对象的唯一方法。在我们的测试中,启用版本控制似乎没有任何其他不需要的副作用。您可以设置非常短的保留时间以确保保留少数(或)版本。