diff --git a/api/src/main/java/io/minio/MinioAsyncClient.java b/api/src/main/java/io/minio/MinioAsyncClient.java index c9c105f81..715559b09 100644 --- a/api/src/main/java/io/minio/MinioAsyncClient.java +++ b/api/src/main/java/io/minio/MinioAsyncClient.java @@ -532,7 +532,8 @@ public CompletableFuture copyObject(CopyObjectArgs args) args.region(), args.object(), result.etag(), - response.header("x-amz-version-id")); + response.header("x-amz-version-id"), + result); } catch (XmlParserException e) { throw new CompletionException(e); } finally { diff --git a/api/src/main/java/io/minio/ObjectWriteResponse.java b/api/src/main/java/io/minio/ObjectWriteResponse.java index 1083a1252..b9ba17834 100644 --- a/api/src/main/java/io/minio/ObjectWriteResponse.java +++ b/api/src/main/java/io/minio/ObjectWriteResponse.java @@ -16,18 +16,68 @@ package io.minio; +import io.minio.messages.CompleteMultipartUploadOutput; +import io.minio.messages.CopyObjectResult; import okhttp3.Headers; /** Response class of any APIs doing object creation. */ public class ObjectWriteResponse extends GenericResponse { private String etag; private String versionId; + private String checksumCRC32; + private String checksumCRC32C; + private String checksumSHA1; + private String checksumSHA256; public ObjectWriteResponse( Headers headers, String bucket, String region, String object, String etag, String versionId) { super(headers, bucket, region, object); this.etag = etag; this.versionId = versionId; + if (headers != null) { + this.checksumCRC32 = headers.get("x-amz-checksum-crc32"); + this.checksumCRC32C = headers.get("x-amz-checksum-crc32c"); + this.checksumSHA1 = headers.get("x-amz-checksum-sha1"); + this.checksumSHA256 = headers.get("x-amz-checksum-sha256"); + } + } + + public ObjectWriteResponse( + Headers headers, + String bucket, + String region, + String object, + String etag, + String versionId, + CopyObjectResult result) { + super(headers, bucket, region, object); + this.etag = etag; + this.versionId = versionId; + if (result != null) { + this.checksumCRC32 = result.checksumCRC32(); + this.checksumCRC32C = result.checksumCRC32C(); + this.checksumSHA1 = result.checksumSHA1(); + this.checksumSHA256 = result.checksumSHA256(); + } + } + + public ObjectWriteResponse( + Headers headers, + String bucket, + String region, + String object, + String etag, + String versionId, + CompleteMultipartUploadOutput result) { + super(headers, bucket, region, object); + this.etag = etag; + this.versionId = versionId; + if (result != null) { + this.checksumCRC32 = result.checksumCRC32(); + this.checksumCRC32C = result.checksumCRC32C(); + this.checksumSHA1 = result.checksumSHA1(); + this.checksumSHA256 = result.checksumSHA256(); + } } public String etag() { @@ -37,4 +87,20 @@ public String etag() { public String versionId() { return versionId; } + + public String checksumCRC32() { + return checksumCRC32; + } + + public String checksumCRC32C() { + return checksumCRC32C; + } + + public String checksumSHA1() { + return checksumSHA1; + } + + public String checksumSHA256() { + return checksumSHA256; + } } diff --git a/api/src/main/java/io/minio/S3Base.java b/api/src/main/java/io/minio/S3Base.java index c9adc8a71..91dba0e7f 100644 --- a/api/src/main/java/io/minio/S3Base.java +++ b/api/src/main/java/io/minio/S3Base.java @@ -2015,7 +2015,8 @@ public CompletableFuture completeMultipartUploadAsync( result.location(), result.object(), result.etag(), - response.header("x-amz-version-id")); + response.header("x-amz-version-id"), + result); } catch (XmlParserException e) { // As this CompleteMultipartUpload REST call succeeded, just log it. Logger.getLogger(S3Base.class.getName()) diff --git a/api/src/main/java/io/minio/messages/CopyObjectResult.java b/api/src/main/java/io/minio/messages/CopyObjectResult.java index 53b0b795e..107f99ebf 100644 --- a/api/src/main/java/io/minio/messages/CopyObjectResult.java +++ b/api/src/main/java/io/minio/messages/CopyObjectResult.java @@ -35,6 +35,18 @@ public class CopyObjectResult { @Element(name = "LastModified") private ResponseDate lastModified; + @Element(name = "ChecksumCRC32", required = false) + private String checksumCRC32; + + @Element(name = "ChecksumCRC32C", required = false) + private String checksumCRC32C; + + @Element(name = "ChecksumSHA1", required = false) + private String checksumSHA1; + + @Element(name = "ChecksumSHA256", required = false) + private String checksumSHA256; + public CopyObjectResult() {} /** Returns ETag of the object. */ @@ -46,4 +58,20 @@ public String etag() { public ZonedDateTime lastModified() { return lastModified.zonedDateTime(); } + + public String checksumCRC32() { + return checksumCRC32; + } + + public String checksumCRC32C() { + return checksumCRC32C; + } + + public String checksumSHA1() { + return checksumSHA1; + } + + public String checksumSHA256() { + return checksumSHA256; + } }