Skip to content

Commit 5a45864

Browse files
author
andrey-qlogic
committed
4117: Added Md5String() method and updated tests.
1 parent 53e2bcb commit 5a45864

File tree

3 files changed

+23
-1
lines changed
  • google-cloud-clients/google-cloud-storage/src
  • google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets

3 files changed

+23
-1
lines changed

google-cloud-clients/google-cloud-storage/src/main/java/com/google/cloud/storage/BlobInfo.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@
2525
import com.google.api.services.storage.model.ObjectAccessControl;
2626
import com.google.api.services.storage.model.StorageObject;
2727
import com.google.api.services.storage.model.StorageObject.Owner;
28-
import com.google.cloud.storage.Blob.Builder;
2928
import com.google.common.base.Function;
3029
import com.google.common.base.MoreObjects;
3130
import com.google.common.collect.ImmutableList;
3231
import com.google.common.collect.ImmutableSet;
3332
import com.google.common.collect.Lists;
3433
import com.google.common.collect.Maps;
34+
import com.google.common.io.BaseEncoding;
3535
import java.io.Serializable;
3636
import java.math.BigInteger;
3737
import java.util.AbstractMap;
@@ -674,6 +674,24 @@ public String getMd5() {
674674
return Data.isNull(md5) ? null : md5;
675675
}
676676

677+
/**
678+
* Returns the MD5 hash of blob's data decoded to string.
679+
*
680+
* @see <a href="https://cloud.google.com/storage/docs/hashes-etags#_JSONAPI">Hashes and ETags:
681+
* Best Practices</a>
682+
*/
683+
public String getMd5String() {
684+
if (md5 == null) {
685+
return null;
686+
}
687+
byte[] decodedMd5 = BaseEncoding.base64().decode(md5);
688+
StringBuilder stringBuilder = new StringBuilder();
689+
for (byte b : decodedMd5) {
690+
stringBuilder.append(String.format("%02x", b & 0xff));
691+
}
692+
return stringBuilder.toString();
693+
}
694+
677695
/**
678696
* Returns the CRC32C checksum of blob's data as described in <a
679697
* href="http://tools.ietf.org/html/rfc4960#appendix-B">RFC 4960, Appendix B;</a> encoded in

google-cloud-clients/google-cloud-storage/src/test/java/com/google/cloud/storage/BlobTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ public class BlobTest {
7676
private static final Long GENERATION = 1L;
7777
private static final String GENERATED_ID = "B/N:1";
7878
private static final String MD5 = "0xFF00";
79+
private static final String MD5_STRING = "d31145d3";
7980
private static final String MEDIA_LINK = "http://media/b/n";
8081
private static final Map<String, String> METADATA = ImmutableMap.of("n1", "v1", "n2", "v2");
8182
private static final Long META_GENERATION = 10L;
@@ -516,6 +517,7 @@ public void testBuilder() {
516517
assertEquals(ETAG, blob.getEtag());
517518
assertEquals(GENERATED_ID, blob.getGeneratedId());
518519
assertEquals(MD5, blob.getMd5());
520+
assertEquals(MD5_STRING, blob.getMd5String());
519521
assertEquals(MEDIA_LINK, blob.getMediaLink());
520522
assertEquals(METADATA, blob.getMetadata());
521523
assertEquals(META_GENERATION, blob.getMetageneration());
@@ -547,6 +549,7 @@ public void testBuilder() {
547549
assertNull(blob.getEtag());
548550
assertNull(blob.getGeneratedId());
549551
assertNull(blob.getMd5());
552+
assertNull(blob.getMd5String());
550553
assertNull(blob.getMediaLink());
551554
assertNull(blob.getMetadata());
552555
assertNull(blob.getMetageneration());

google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,6 +1141,7 @@ public void getBlobMetadata(String bucketName, String blobName) throws StorageEx
11411141
System.out.println("Id: " + blob.getBlobId());
11421142
System.out.println("KmsKeyName: " + blob.getKmsKeyName());
11431143
System.out.println("Md5Hash: " + blob.getMd5());
1144+
System.out.println("Md5String: " + blob.getMd5String());
11441145
System.out.println("MediaLink: " + blob.getMediaLink());
11451146
System.out.println("Metageneration: " + blob.getMetageneration());
11461147
System.out.println("Name: " + blob.getName());

0 commit comments

Comments
 (0)