@Override public List<MultipartPart> listMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<MultipartPart> builder = ImmutableList.builder(); for (MultipartPart part : super.listMultipartUpload(mpu)) { builder.add(MultipartPart.create(part.partNumber(), 0, part.partETag(), part.lastModified())); } return builder.build(); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { long length; try (InputStream is = payload.openStream()) { length = ByteStreams.copy(is, ByteStreams.nullOutputStream()); } catch (IOException ioe) { throw new RuntimeException(ioe); } byte[] array = Longs.toByteArray(length); ByteSourcePayload newPayload = new ByteSourcePayload( ByteSource.wrap(array)); newPayload.setContentMetadata(payload.getContentMetadata()); newPayload.getContentMetadata().setContentLength((long) array.length); newPayload.getContentMetadata().setContentMD5((HashCode) null); MultipartPart part = super.uploadMultipartPart(mpu, partNumber, newPayload); return MultipartPart.create(part.partNumber(), length, part.partETag(), part.lastModified()); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<String> sha1 = ImmutableList.builder(); for (MultipartPart part : parts) { sha1.add(part.partETag()); } B2Object b2Object = api.getMultipartApi().finishLargeFile(mpu.id(), sha1.build()); return b2Object.contentSha1(); // this is always "none" }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<String> sha1 = ImmutableList.builder(); for (MultipartPart part : parts) { sha1.add(part.partETag()); } B2Object b2Object = api.getMultipartApi().finishLargeFile(mpu.id(), sha1.build()); return b2Object.contentSha1(); // this is always "none" }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<String> sha1 = ImmutableList.builder(); for (MultipartPart part : parts) { sha1.add(part.partETag()); } B2Object b2Object = api.getMultipartApi().finishLargeFile(mpu.id(), sha1.build()); return b2Object.contentSha1(); // this is always "none" }
@Override public List<MultipartPart> listMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<MultipartPart> builder = ImmutableList.builder(); for (MultipartPart part : super.listMultipartUpload(mpu)) { builder.add(MultipartPart.create(part.partNumber(), 0, part.partETag(), part.lastModified())); } return builder.build(); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<String> sha1 = ImmutableList.builder(); for (MultipartPart part : parts) { sha1.add(part.partETag()); } B2Object b2Object = api.getMultipartApi().finishLargeFile(mpu.id(), sha1.build()); return b2Object.contentSha1(); // this is always "none" }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableMap.Builder<Integer, String> builder = ImmutableMap.builder(); for (MultipartPart part : parts) { builder.put(part.partNumber(), part.partETag()); } return sync.completeMultipartUpload(mpu.containerName(), mpu.blobName(), mpu.id(), builder.build()); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableMap.Builder<Integer, String> builder = ImmutableMap.builder(); for (MultipartPart part : parts) { builder.put(part.partNumber(), part.partETag()); } return sync.completeMultipartUpload(mpu.containerName(), mpu.blobName(), mpu.id(), builder.build()); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableMap.Builder<Integer, String> builder = ImmutableMap.builder(); for (MultipartPart part : parts) { builder.put(part.partNumber(), part.partETag()); } return sync.completeMultipartUpload(mpu.containerName(), mpu.blobName(), mpu.id(), builder.build()); }
@Override protected void checkMPUParts(Blob blob, List<MultipartPart> partsList) { assertThat(blob.getMetadata().getETag()).endsWith(String.format("-%d\"", partsList.size())); Hasher eTagHasher = Hashing.md5().newHasher(); for (MultipartPart part : partsList) { eTagHasher.putBytes(BaseEncoding.base16().lowerCase().decode(part.partETag())); } String expectedETag = new StringBuilder("\"") .append(eTagHasher.hash()) .append("-") .append(partsList.size()) .append("\"") .toString(); assertThat(blob.getMetadata().getETag()).isEqualTo(expectedETag); }
@Override public List<MultipartPart> listMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<MultipartPart> builder = ImmutableList.builder(); for (MultipartPart part : super.listMultipartUpload(mpu)) { // get real blob size from stub blob Blob blob = getBlob(mpu.containerName(), mpu.id() + "-" + part.partNumber()); long length = blob.getPayload().getContentMetadata() .getContentLength(); builder.add(MultipartPart.create(part.partNumber(), length, part.partETag(), part.lastModified())); } return builder.build(); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<Segment> builder = ImmutableList.builder(); for (MultipartPart part : parts) { String path = mpu.containerName() + "/" + getMPUPartName(mpu, part.partNumber()); builder.add(Segment.builder().path(path).etag(part.partETag()).sizeBytes(part.partSize()).build()); } return api.getStaticLargeObjectApi(regionId, mpu.containerName()).replaceManifest(mpu.blobName(), builder.build(), mpu.blobMetadata().getUserMetadata(), getContentMetadataForManifest(mpu.blobMetadata().getContentMetadata())); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<Segment> builder = ImmutableList.builder(); for (MultipartPart part : parts) { String path = mpu.containerName() + "/" + getMPUPartName(mpu, part.partNumber()); builder.add(Segment.builder().path(path).etag(part.partETag()).sizeBytes(part.partSize()).build()); } return api.getStaticLargeObjectApi(regionId, mpu.containerName()).replaceManifest(mpu.blobName(), builder.build(), mpu.blobMetadata().getUserMetadata(), getContentMetadataForManifest(mpu.blobMetadata().getContentMetadata())); }
@Override public String completeMultipartUpload(MultipartUpload mpu, List<MultipartPart> parts) { ImmutableList.Builder<Segment> builder = ImmutableList.builder(); for (MultipartPart part : parts) { String path = mpu.containerName() + "/" + getMPUPartName(mpu, part.partNumber()); builder.add(Segment.builder().path(path).etag(part.partETag()).sizeBytes(part.partSize()).build()); } return api.getStaticLargeObjectApi(regionId, mpu.containerName()).replaceManifest(mpu.blobName(), builder.build(), mpu.blobMetadata().getUserMetadata(), getContentMetadataForManifest(mpu.blobMetadata().getContentMetadata())); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { long length; try (InputStream is = payload.openStream()) { length = ByteStreams.copy(is, ByteStreams.nullOutputStream()); } catch (IOException ioe) { throw new RuntimeException(ioe); } byte[] array = Longs.toByteArray(length); ByteSourcePayload newPayload = new ByteSourcePayload( ByteSource.wrap(array)); newPayload.setContentMetadata(payload.getContentMetadata()); newPayload.getContentMetadata().setContentLength((long) array.length); newPayload.getContentMetadata().setContentMD5((HashCode) null); MultipartPart part = super.uploadMultipartPart(mpu, partNumber, newPayload); return MultipartPart.create(part.partNumber(), length, part.partETag(), part.lastModified()); }
assertThat(parts.get(0).partNumber()).isEqualTo(part1.partNumber()); assertThat(parts.get(0).partSize()).isEqualTo(part1.partSize()); assertThat(parts.get(0).partETag()).isEqualTo(part1.partETag()); assertThat(parts.get(1).partNumber()).isEqualTo(part2.partNumber()); assertThat(parts.get(1).partSize()).isEqualTo(part2.partSize()); assertThat(parts.get(1).partETag()).isEqualTo(part2.partETag());
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { long length; try (InputStream is = payload.openStream()) { length = ByteStreams.copy(is, ByteStreams.nullOutputStream()); } catch (IOException ioe) { throw new RuntimeException(ioe); } byte[] array = Longs.toByteArray(length); ByteSourcePayload newPayload = new ByteSourcePayload( ByteSource.wrap(array)); newPayload.setContentMetadata(payload.getContentMetadata()); newPayload.getContentMetadata().setContentLength((long) array.length); newPayload.getContentMetadata().setContentMD5((HashCode) null); // create a single-part object which contains the logical length which // list and complete will read later Blob blob = blobBuilder(mpu.id() + "-" + partNumber) .payload(newPayload) .build(); super.putBlob(mpu.containerName(), blob); MultipartPart part = super.uploadMultipartPart(mpu, partNumber, newPayload); return MultipartPart.create(part.partNumber(), length, part.partETag(), part.lastModified()); }