You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2013/07/25 19:30:16 UTC

git commit: Preserve blob metadata for AWS-S3 MPU

Updated Branches:
  refs/heads/1.6.x b7d75f794 -> 4b5b89ae7


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/4b5b89ae
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/4b5b89ae
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/4b5b89ae

Branch: refs/heads/1.6.x
Commit: 4b5b89ae757ce3e7466666d2ce05694a742b1b42
Parents: b7d75f7
Author: Diwaker Gupta <di...@maginatics.com>
Authored: Wed Jul 24 11:50:39 2013 -0700
Committer: Andrew Gaul <ga...@apache.org>
Committed: Thu Jul 25 09:50:55 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/4b5b89ae/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/4b5b89ae/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");