Updated Branches: refs/heads/master 462117651 -> 2409ac1a3
Preserve blob metadata for AWS-S3 MPU Specifically preserve content-type and content-disposition for multi-part uploads. Fixes JCLOUDS-204 Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/2409ac1a Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/2409ac1a Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/2409ac1a Branch: refs/heads/master Commit: 2409ac1a371465b753effb52cb4b7be6164e2f7e Parents: 4621176 Author: Diwaker Gupta <[email protected]> Authored: Wed Jul 24 11:50:39 2013 -0700 Committer: Andrew Gaul <[email protected]> Committed: Thu Jul 25 10:31:47 2013 -0700 ---------------------------------------------------------------------- .../internal/SequentialMultipartUploadStrategy.java | 7 ++++++- .../internal/SequentialMultipartUploadStrategyMockTest.java | 9 ++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/2409ac1a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java ---------------------------------------------------------------------- diff --git a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java index 7696f07..4d5eea9 100644 --- a/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java +++ b/providers/aws-s3/src/main/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategy.java @@ -28,6 +28,7 @@ import org.jclouds.aws.s3.blobstore.strategy.MultipartUploadStrategy; import org.jclouds.blobstore.KeyNotFoundException; import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.reference.BlobStoreConstants; +import org.jclouds.io.ContentMetadata; import org.jclouds.io.Payload; import org.jclouds.io.PayloadSlicer; import org.jclouds.logging.Logger; @@ -72,6 +73,7 @@ public class SequentialMultipartUploadStrategy implements MultipartUploadStrateg @Override public String execute(String container, Blob blob) { String key = blob.getMetadata().getName(); + ContentMetadata metadata = blob.getMetadata().getContentMetadata(); Payload payload = blob.getPayload(); Long length = payload.getContentMetadata().getContentLength(); checkNotNull(length, @@ -79,7 +81,10 @@ public class SequentialMultipartUploadStrategy implements MultipartUploadStrateg long chunkSize = algorithm.calculateChunkSize(length); int partCount = algorithm.getParts(); if (partCount > 0) { - String uploadId = client.initiateMultipartUpload(container, ObjectMetadataBuilder.create().key(key).build()); + ObjectMetadataBuilder builder = ObjectMetadataBuilder.create().key(key) + .contentType(metadata.getContentType()) + .contentDisposition(metadata.getContentDisposition()); + String uploadId = client.initiateMultipartUpload(container, builder.build()); try { SortedMap<Integer, String> etags = Maps.newTreeMap(); int part; http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/2409ac1a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java ---------------------------------------------------------------------- diff --git a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java index 052be49..12e4ce1 100644 --- a/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java +++ b/providers/aws-s3/src/test/java/org/jclouds/aws/s3/blobstore/strategy/internal/SequentialMultipartUploadStrategyMockTest.java @@ -34,6 +34,8 @@ import org.testng.annotations.Test; import com.google.common.base.Charsets; import com.google.common.collect.ImmutableSet; +import com.google.common.net.HttpHeaders; +import com.google.common.net.MediaType; import com.google.inject.Module; import com.google.mockwebserver.MockResponse; import com.google.mockwebserver.MockWebServer; @@ -62,12 +64,17 @@ public class SequentialMultipartUploadStrategyMockTest { partSize); try { - assertEquals(api.execute("container", new BlobBuilderImpl().name("foo").payload(bytes).build()), "fff"); + assertEquals(api.execute("container", new BlobBuilderImpl().name("foo").payload(bytes) + .contentDisposition("inline; filename=foo.mp4") + .contentType(MediaType.MP4_VIDEO.toString()) + .build()), "fff"); } finally { RecordedRequest initiate = server.takeRequest(); assertEquals(initiate.getRequestLine(), "POST /container/foo?uploads HTTP/1.1"); assertEquals(initiate.getHeader("Content-Length"), "0"); + assertEquals(initiate.getHeader(HttpHeaders.CONTENT_TYPE), MediaType.MP4_VIDEO.toString()); + assertEquals(initiate.getHeader(HttpHeaders.CONTENT_DISPOSITION), "inline; filename=foo.mp4"); RecordedRequest part1 = server.takeRequest(); assertEquals(part1.getRequestLine(), "PUT /container/foo?partNumber=1&uploadId=upload-id HTTP/1.1");
