diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/BlobSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/BlobSnippets.java index a120dad158ac..8767aa9daaf1 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/BlobSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/BlobSnippets.java @@ -172,6 +172,25 @@ public Blob copyToStrings(String bucketName, String blobName) { return copiedBlob; } + /** + * Example of moving a blob to a different bucket with a different name. + */ + // [TARGET copyTo(String, String, BlobSourceOption...)] + // [VARIABLE "my_unique_bucket"] + // [VARIABLE "move_blob_name"] + public Blob moveTo(String destBucket, String destBlob) { + // [START storageMoveFile] + CopyWriter copyWriter = blob.copyTo(destBucket, destBlob); + Blob copiedBlob = copyWriter.getResult(); + boolean deleted = blob.delete(); + // [END storageMoveFile] + if (deleted) { + return copiedBlob; + } else { + return null; + } + } + /** * Example of reading the blob's content through a reader. */ diff --git a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java index 88780cce0956..45ca7d14e759 100644 --- a/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java +++ b/google-cloud-examples/src/main/java/com/google/cloud/examples/storage/snippets/StorageSnippets.java @@ -908,6 +908,21 @@ public Acl updateBlobAcl(String bucketName, String blobName, long blobGeneration return acl; } + /** + * Example of updating a blob to be public-read. + */ + // [TARGET createAcl(BlobId, Acl)] + // [VARIABLE "my_unique_bucket"] + // [VARIABLE "my_blob_name"] + // [VARIABLE 42] + public Acl blobToPublicRead(String bucketName, String blobName, long blobGeneration) { + // [START storageMakePublic] + BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration); + Acl acl = storage.createAcl(blobId, Acl.of(User.ofAllUsers(), Role.READER)); + // [END storageMakePublic] + return acl; + } + /** * Example of listing the ACL entries for a blob. */ diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITBlobSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITBlobSnippets.java index 770009e34209..4998cb0c00cc 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITBlobSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITBlobSnippets.java @@ -31,12 +31,15 @@ import com.google.cloud.storage.BlobInfo; import com.google.cloud.storage.BucketInfo; import com.google.cloud.storage.Storage; +import com.google.cloud.storage.Storage.BlobListOption; import com.google.cloud.storage.StorageException; import com.google.cloud.storage.testing.RemoteStorageHelper; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; +import org.junit.After; import org.junit.AfterClass; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Rule; import org.junit.Test; @@ -46,6 +49,7 @@ import java.io.InputStream; import java.net.URL; import java.net.URLConnection; +import java.util.Iterator; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -71,7 +75,6 @@ public static void beforeClass() { RemoteStorageHelper helper = RemoteStorageHelper.create(); storage = helper.getOptions().getService(); storage.create(BucketInfo.of(BUCKET)); - blob = storage.create(BlobInfo.newBuilder(BUCKET, BLOB).build()); } @AfterClass @@ -84,6 +87,18 @@ public static void afterClass() throws ExecutionException, InterruptedException } } + @Before + public void before() { + blob = storage.create(BlobInfo.newBuilder(BUCKET, BLOB).build()); + } + + @After + public void after() { + for (BlobInfo info : storage.list(BUCKET, BlobListOption.versions(true)).getValues()) { + storage.delete(info.getBlobId()); + } + } + @Test public void testBlob() throws IOException { BlobSnippets blobSnippets = new BlobSnippets(blob); @@ -137,4 +152,21 @@ public void testBlob() throws IOException { assertNull(blobSnippets.getAcl()); storage.delete(BlobId.of(BUCKET, BLOB)); } + + @Test + public void testMoveBlob() throws IOException { + BlobSnippets blobSnippets = new BlobSnippets(blob); + + Blob movedBlob = blobSnippets.moveTo(BUCKET, "moveBlob"); + assertNotNull(movedBlob); + + // Assert that the destination blob exists + Iterator blobs = storage.list(BUCKET).iterateAll(); + Blob moveBlob = blobs.next(); + assertEquals(BUCKET, moveBlob.getBucket()); + assertEquals("moveBlob", moveBlob.getName()); + + // Assert that the old blob doesn't exist + assertFalse(blobs.hasNext()); + } } diff --git a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITStorageSnippets.java b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITStorageSnippets.java index d215b2e5b908..98a8a10021dc 100644 --- a/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITStorageSnippets.java +++ b/google-cloud-examples/src/test/java/com/google/cloud/examples/storage/snippets/ITStorageSnippets.java @@ -27,6 +27,7 @@ import com.google.cloud.Page; import com.google.cloud.storage.Acl; +import com.google.cloud.storage.Acl.User; import com.google.cloud.storage.Blob; import com.google.cloud.storage.BlobId; import com.google.cloud.storage.BlobInfo; @@ -319,6 +320,14 @@ public void testBlobAcl() { Set acls = Sets.newHashSet( storageSnippets.listBlobAcls(BUCKET, blobName, createdBlob.getGeneration())); assertTrue(acls.contains(updatedAcl)); + + updatedAcl = storageSnippets.blobToPublicRead(BUCKET, blobName, createdBlob.getGeneration()); + assertEquals(Acl.Role.READER, updatedAcl.getRole()); + assertEquals(User.ofAllUsers(), updatedAcl.getEntity()); + acls = Sets.newHashSet( + storageSnippets.listBlobAcls(BUCKET, blobName, createdBlob.getGeneration())); + assertTrue(acls.contains(updatedAcl)); + assertTrue(storageSnippets.deleteBlobAcl(BUCKET, blobName, createdBlob.getGeneration())); assertNull(storageSnippets.getBlobAcl(BUCKET, blobName, createdBlob.getGeneration())); // test non-existing blob diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/Blob.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/Blob.java index 6f71b03c8de7..6c09cbecc12d 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/Blob.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/Blob.java @@ -591,6 +591,15 @@ public CopyWriter copyTo(String targetBucket, BlobSourceOption... options) { * Blob copiedBlob = copyWriter.getResult(); * } * + *

Example of moving a blob to a different bucket with a different name. + *

 {@code
+   * String destBucket = "my_unique_bucket";
+   * String destBlob = "move_blob_name";
+   * CopyWriter copyWriter = blob.copyTo(destBucket, destBlob);
+   * Blob copiedBlob = copyWriter.getResult();
+   * boolean deleted = blob.delete();
+   * }
+ * * @param targetBucket target bucket's name * @param targetBlob target blob's name * @param options source blob options diff --git a/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java b/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java index 1cb268e81d7d..286f384934c2 100644 --- a/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java +++ b/google-cloud-storage/src/main/java/com/google/cloud/storage/Storage.java @@ -2456,6 +2456,15 @@ public static Builder newBuilder() { * Acl acl = storage.createAcl(blobId, Acl.of(User.ofAllAuthenticatedUsers(), Role.READER)); * } * + *

Example of updating a blob to be public-read. + *

 {@code
+   * String bucketName = "my_unique_bucket";
+   * String blobName = "my_blob_name";
+   * long blobGeneration = 42;
+   * BlobId blobId = BlobId.of(bucketName, blobName, blobGeneration);
+   * Acl acl = storage.createAcl(blobId, Acl.of(User.ofAllUsers(), Role.READER));
+   * }
+ * * @throws StorageException upon failure */ Acl createAcl(BlobId blob, Acl acl);