@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { MultipartPart part = delegate().uploadMultipartPart(mpu, partNumber, payload); return part; }
@Override public String completeMultipartUpload(final MultipartUpload mpu, final List<MultipartPart> parts) { long length = 0; for (MultipartPart part : parts) { length += part.partSize(); } byte[] array = Longs.toByteArray(length); ByteSourcePayload payload = new ByteSourcePayload( ByteSource.wrap(array)); super.abortMultipartUpload(mpu); MultipartPart part = delegate().uploadMultipartPart(mpu, 1, payload); return delegate().completeMultipartUpload(mpu, ImmutableList.of(part)); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { MultipartPart part = delegate().uploadMultipartPart(mpu, partNumber, payload); return part; }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { MultipartPart part = delegate().uploadMultipartPart(mpu, partNumber, payload); return part; }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { return delegate().uploadMultipartPart(mpu, partNumber, payload); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { return delegate().uploadMultipartPart(mpu, partNumber, payload); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { return delegate().uploadMultipartPart(mpu, partNumber, payload); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { return delegate().uploadMultipartPart(mpu, partNumber, payload); }
@Override public String completeMultipartUpload(final MultipartUpload mpu, final List<MultipartPart> parts) { long length = 0; for (MultipartPart part : parts) { length += part.partSize(); } byte[] array = Longs.toByteArray(length); ByteSourcePayload payload = new ByteSourcePayload( ByteSource.wrap(array)); super.abortMultipartUpload(mpu); MultipartPart part = delegate().uploadMultipartPart(mpu, 1, payload); return delegate().completeMultipartUpload(mpu, ImmutableList.of(part)); }
@Test(groups = { "integration", "live" }) public void testMultipartUploadMultiplePartsKnownETag() throws Exception { BlobStore blobStore = view.getBlobStore(); String container = getContainerName(); // Pre-computed ETag returned by AWS S3 for the MPU consisting of two 5MB parts filled with 'b' String expectedETag = "\"84462a16f6a60478d50148808aa609c1-2\""; int partSize = 5 * 1024 * 1024; try { String name = "blob-name"; BlobBuilder blobBuilder = blobStore.blobBuilder(name); Blob blob = blobBuilder.build(); MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata(), new PutOptions()); byte[] content = new byte[partSize]; Arrays.fill(content, (byte) 'b'); Payload payload = Payloads.newByteArrayPayload(content); payload.getContentMetadata().setContentLength((long) partSize); MultipartPart part1 = blobStore.uploadMultipartPart(mpu, 1, payload); MultipartPart part2 = blobStore.uploadMultipartPart(mpu, 2, payload); blobStore.completeMultipartUpload(mpu, ImmutableList.of(part1, part2)); BlobMetadata newBlobMetadata = blobStore.blobMetadata(container, name); assertThat(newBlobMetadata.getETag()).isEqualTo(expectedETag); } finally { returnContainer(container); } }
@Test(groups = { "integration", "live" }) public void test10000PartMultipartUpload() throws Exception { BlobStore blobStore = view.getBlobStore(); String container = getContainerName(); int partSize = (int) blobStore.getMinimumMultipartPartSize(); try { String name = "blob-name"; BlobBuilder blobBuilder = blobStore.blobBuilder(name); Blob blob = blobBuilder.build(); MultipartUpload mpu = blobStore.initiateMultipartUpload(container, blob.getMetadata(), new PutOptions()); ImmutableList.Builder<MultipartPart> parts = ImmutableList.builder(); byte[] content = new byte[partSize]; for (int i = 0; i < 10 * 1000; ++i) { Payload payload = Payloads.newByteArrayPayload(content); payload.getContentMetadata().setContentLength((long) partSize); parts.add(blobStore.uploadMultipartPart(mpu, i, payload)); } blobStore.completeMultipartUpload(mpu, parts.build()); BlobMetadata newBlobMetadata = blobStore.blobMetadata(container, name); assertThat(newBlobMetadata.getSize()).isEqualTo(10 * 1000 * partSize); } finally { returnContainer(container); } }
payload1.getContentMetadata().setContentLength(byteSource1.size()); payload2.getContentMetadata().setContentLength(byteSource2.size()); MultipartPart part1 = blobStore.uploadMultipartPart(mpu, 1, payload1); MultipartPart part2 = blobStore.uploadMultipartPart(mpu, 2, payload2);
Payload payload = Payloads.newByteSourcePayload(byteSource); payload.getContentMetadata().setContentLength(byteSource.size()); MultipartPart part = blobStore.uploadMultipartPart(mpu, 1, payload);
payload1.getContentMetadata().setContentLength(byteSource1.size()); payload2.getContentMetadata().setContentLength(byteSource2.size()); MultipartPart part1 = blobStore.uploadMultipartPart(mpu, 1, payload1); MultipartPart part2 = blobStore.uploadMultipartPart(mpu, 2, payload2);