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 b761e3c35de9..a120dad158ac 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 @@ -189,6 +189,23 @@ public void reader() throws IOException { // [END reader] } + /** + * Example of reading just a portion of the blob's content. + */ + // [TARGET reader(BlobSourceOption...)] + // [VARIABLE 1] + // [VARIABLE 8] + public byte[] readContentRange(int start, int end) throws IOException { + // [START readContentRange] + try (ReadChannel reader = blob.reader()) { + reader.seek(start); + ByteBuffer bytes = ByteBuffer.allocate(end - start); + reader.read(bytes); + return bytes.array(); + } + // [END readContentRange] + } + /** * Example of writing the blob's content through a writer. */ 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 5424d1b650b9..88780cce0956 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 @@ -90,6 +90,23 @@ public Bucket createBucket(String bucketName) { return bucket; } + /** + * Example of creating a bucket with storage class and location. + */ + // [TARGET create(BucketInfo, BucketTargetOption...)] + // [VARIABLE "my_unique_bucket"] + public Bucket createBucketWithStorageClassAndLocation(String bucketName) { + // [START createBucketWithStorageClassAndLocation] + Bucket bucket = storage.create(BucketInfo.newBuilder(bucketName) + // See here for possible values: http://g.co/cloud/storage/docs/storage-classes + .setStorageClass("COLDLINE") + // Possible values: http://g.co/cloud/storage/docs/bucket-locations#location-mr + .setLocation("asia") + .build()); + // [END createBucketWithStorageClassAndLocation] + return bucket; + } + /** * Example of creating a blob with no content. */ 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 063899bf50d6..770009e34209 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 @@ -123,6 +123,10 @@ public void testBlob() throws IOException { } assertFalse(blobSnippets.delete()); blobSnippets = new BlobSnippets(storage.get(blob.getBucket(), blob.getName())); + + byte[] subcontent = blobSnippets.readContentRange(1, 8); + assertArrayEquals("ello, W".getBytes(UTF_8), subcontent); + assertNull(blobSnippets.getAcl()); assertNotNull(blobSnippets.createAcl()); Acl updatedAcl = blobSnippets.updateAcl(); 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 4e05a3eaa5c4..d215b2e5b908 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 @@ -48,6 +48,7 @@ import java.io.InputStream; import java.net.URL; import java.net.URLConnection; +import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; @@ -64,6 +65,7 @@ public class ITStorageSnippets { private static Storage storage; private static StorageSnippets storageSnippets; + private static List bucketsToCleanUp; @Rule public ExpectedException thrown = ExpectedException.none(); @@ -75,20 +77,35 @@ public class ITStorageSnippets { public static void beforeClass() { RemoteStorageHelper helper = RemoteStorageHelper.create(); storage = helper.getOptions().getService(); + bucketsToCleanUp = new ArrayList(); storageSnippets = new StorageSnippets(storage); storageSnippets.createBucket(BUCKET); + bucketsToCleanUp.add(BUCKET); } @AfterClass public static void afterClass() throws ExecutionException, InterruptedException { if (storage != null) { - boolean wasDeleted = RemoteStorageHelper.forceDelete(storage, BUCKET, 5, TimeUnit.SECONDS); - if (!wasDeleted && log.isLoggable(Level.WARNING)) { - log.log(Level.WARNING, "Deletion of bucket {0} timed out, bucket is not empty", BUCKET); + for (String bucket : bucketsToCleanUp) { + boolean wasDeleted = RemoteStorageHelper.forceDelete(storage, bucket, 5, TimeUnit.SECONDS); + if (!wasDeleted && log.isLoggable(Level.WARNING)) { + log.log(Level.WARNING, "Deletion of bucket {0} timed out, bucket is not empty", bucket); + } } } } + @Test + public void testCreateBucketWithStorageClassAndLocation() + throws ExecutionException, InterruptedException { + String tempBucket = RemoteStorageHelper.generateBucketName(); + bucketsToCleanUp.add(tempBucket); + + Bucket bucket = storageSnippets.createBucketWithStorageClassAndLocation(tempBucket); + + assertNotNull(bucket); + } + @Test public void testBlob() throws InterruptedException { String blobName = "directory/test-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 2f6667a5a062..6f71b03c8de7 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 @@ -617,6 +617,18 @@ public CopyWriter copyTo(String targetBucket, String targetBlob, BlobSourceOptio * } * } * + *

Example of reading just a portion of the blob's content. + *

 {@code
+   * int start = 1;
+   * int end = 8;
+   * try (ReadChannel reader = blob.reader()) {
+   *   reader.seek(start);
+   *   ByteBuffer bytes = ByteBuffer.allocate(end - start);
+   *   reader.read(bytes);
+   *   return bytes.array();
+   * }
+   * }
+ * * @param options blob read options * @throws StorageException upon failure */ 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 f2e779a18f15..1cb268e81d7d 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 @@ -1496,6 +1496,17 @@ public static Builder newBuilder() { * Bucket bucket = storage.create(BucketInfo.of(bucketName)); * } * + *

Example of creating a bucket with storage class and location. + *

 {@code
+   * String bucketName = "my_unique_bucket";
+   * Bucket bucket = storage.create(BucketInfo.newBuilder(bucketName)
+   *     // See here for possible values: http://g.co/cloud/storage/docs/storage-classes
+   *     .setStorageClass("COLDLINE")
+   *     // Possible values: http://g.co/cloud/storage/docs/bucket-locations#location-mr
+   *     .setLocation("asia")
+   *     .build());
+   * }
+ * * @return a complete bucket * @throws StorageException upon failure */