private static void handleAbortMultipartUpload(HttpServletResponse response, BlobStore blobStore, String containerName, String blobName, String uploadId) throws IOException, S3Exception { if (Quirks.MULTIPART_REQUIRES_STUB.contains(getBlobStoreType( blobStore))) { if (!blobStore.blobExists(containerName, uploadId)) { throw new S3Exception(S3ErrorCode.NO_SUCH_UPLOAD); } blobStore.removeBlob(containerName, uploadId); } // TODO: how to reconstruct original mpu? MultipartUpload mpu = MultipartUpload.create(containerName, blobName, uploadId, createFakeBlobMetadata(blobStore), new PutOptions()); blobStore.abortMultipartUpload(mpu); response.sendError(HttpServletResponse.SC_NO_CONTENT); }
@Override public void abortMultipartUpload(MultipartUpload mpu) { sync.abortMultipartUpload(mpu.containerName(), mpu.blobName(), mpu.id()); }
@Override public String completeMultipartUpload(final MultipartUpload mpu, final List<MultipartPart> parts) { long length = 0; for (MultipartPart part : parts) { length += part.partSize(); super.removeBlob(mpu.containerName(), mpu.id() + "-" + part.partNumber()); } byte[] array = Longs.toByteArray(length); ByteSourcePayload payload = new ByteSourcePayload( ByteSource.wrap(array)); payload.getContentMetadata().setContentLength((long) array.length); super.abortMultipartUpload(mpu); MultipartUpload mpu2 = super.initiateMultipartUpload( mpu.containerName(), mpu.blobMetadata(), mpu.putOptions()); MultipartPart part = super.uploadMultipartPart(mpu2, 1, payload); return super.completeMultipartUpload(mpu2, ImmutableList.of(part)); }
@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) { String blockId = BaseEncoding.base64().encode(Ints.toByteArray(partNumber)); sync.putBlock(mpu.containerName(), mpu.blobName(), blockId, payload); String eTag = ""; // putBlock does not return ETag Date lastModified = null; // putBlob does not return Last-Modified return MultipartPart.create(partNumber, payload.getContentMetadata().getContentLength(), eTag); }
@Override public void abortMultipartUpload(MultipartUpload mpu) { for (MultipartPart part : super.listMultipartUpload(mpu)) { super.removeBlob(mpu.containerName(), mpu.id() + "-" + part.partNumber()); } super.abortMultipartUpload(mpu); }
@Override public void abortMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<String> builder = ImmutableList.builder(); List<MultipartPart> parts = listMultipartUpload(mpu); for (MultipartPart part : parts) { builder.add(getMPUPartName(mpu, part.partNumber())); } removeBlobs(mpu.containerName(), builder.build()); }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { String partName = getMPUPartName(mpu, partNumber); long partSize = payload.getContentMetadata().getContentLength(); InsertObjectOptions insertOptions = new InsertObjectOptions().name(partName); GoogleCloudStorageObject object = api.getObjectApi().simpleUpload(mpu.containerName(), mpu.blobMetadata().getContentMetadata().getContentType(), partSize, payload, insertOptions); return MultipartPart.create(partNumber, partSize, object.etag(), object.updated()); }
long contentLength = 0; for (MultipartPart part : parts) { Blob blobPart = getBlob(mpu.containerName(), MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-" + part.partNumber()); contentLength += blobPart.getMetadata().getContentMetadata().getContentLength(); InputStream is; PayloadBlobBuilder blobBuilder = blobBuilder(mpu.blobName()) .userMetadata(mpu.blobMetadata().getUserMetadata()) .payload(new SequenceInputStream(Iterators.asEnumeration(streams.build().iterator()))) .contentLength(contentLength); String cacheControl = mpu.blobMetadata().getContentMetadata().getCacheControl(); if (cacheControl != null) { blobBuilder.cacheControl(cacheControl); String contentDisposition = mpu.blobMetadata().getContentMetadata().getContentDisposition(); if (contentDisposition != null) { blobBuilder.contentDisposition(contentDisposition); String contentEncoding = mpu.blobMetadata().getContentMetadata().getContentEncoding(); if (contentEncoding != null) { blobBuilder.contentEncoding(contentEncoding); String contentLanguage = mpu.blobMetadata().getContentMetadata().getContentLanguage(); if (contentLanguage != null) { blobBuilder.contentLanguage(contentLanguage); String contentType = mpu.blobMetadata().getContentMetadata().getContentType(); if (contentType != null) { blobBuilder.contentType(contentType);
@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())); }
private static String getMPUPartName(MultipartUpload mpu, int partNumber) { return String.format("%s_%08d", mpu.id(), partNumber); } }
@Override public MultipartPart uploadMultipartPart(MultipartUpload mpu, int partNumber, Payload payload) { String blockId = BaseEncoding.base64().encode(Ints.toByteArray(partNumber)); sync.putBlock(mpu.containerName(), mpu.blobName(), blockId, payload); String eTag = ""; // putBlock does not return ETag Date lastModified = null; // putBlob does not return Last-Modified return MultipartPart.create(partNumber, payload.getContentMetadata().getContentLength(), eTag); }
@Override public List<MultipartPart> listMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<MultipartPart> parts = ImmutableList.builder(); PageSet<? extends StorageMetadata> pageSet = list(mpu.containerName(), new ListContainerOptions().prefix(mpu.id() + "_")); // TODO: pagination for (StorageMetadata sm : pageSet) { int lastUnderscore = sm.getName().lastIndexOf('_'); int partNumber = Integer.parseInt(sm.getName().substring(lastUnderscore + 1)); parts.add(MultipartPart.create(partNumber, sm.getSize(), sm.getETag(), sm.getLastModified())); } return parts.build(); }
@Override public void abortMultipartUpload(MultipartUpload mpu) { ImmutableList.Builder<String> names = ImmutableList.builder(); for (MultipartPart part : listMultipartUpload(mpu)) { names.add(getMPUPartName(mpu, part.partNumber())); } removeBlobs(mpu.containerName(), names.build()); }
@Override public void abortMultipartUpload(MultipartUpload mpu) { sync.abortMultipartUpload(mpu.containerName(), mpu.blobName(), mpu.id()); }
long contentLength = 0; for (MultipartPart part : parts) { Blob blobPart = getBlob(mpu.containerName(), MULTIPART_PREFIX + mpu.id() + "-" + mpu.blobName() + "-" + part.partNumber()); contentLength += blobPart.getMetadata().getContentMetadata().getContentLength(); InputStream is; PayloadBlobBuilder blobBuilder = blobBuilder(mpu.blobName()) .userMetadata(mpu.blobMetadata().getUserMetadata()) .payload(new SequenceInputStream(Iterators.asEnumeration(streams.build().iterator()))) .contentLength(contentLength); String cacheControl = mpu.blobMetadata().getContentMetadata().getCacheControl(); if (cacheControl != null) { blobBuilder.cacheControl(cacheControl); String contentDisposition = mpu.blobMetadata().getContentMetadata().getContentDisposition(); if (contentDisposition != null) { blobBuilder.contentDisposition(contentDisposition); String contentEncoding = mpu.blobMetadata().getContentMetadata().getContentEncoding(); if (contentEncoding != null) { blobBuilder.contentEncoding(contentEncoding); String contentLanguage = mpu.blobMetadata().getContentMetadata().getContentLanguage(); if (contentLanguage != null) { blobBuilder.contentLanguage(contentLanguage); String contentType = mpu.blobMetadata().getContentMetadata().getContentType(); if (contentType != null) { blobBuilder.contentType(contentType);
BlobAccess access = blobStore.getBlobAccess(containerName, uploadId); mpu = MultipartUpload.create(containerName, blobName, uploadId, stubBlob.getMetadata(), new PutOptions().setBlobAccess(access)); } else { mpu = MultipartUpload.create(containerName, blobName, uploadId, new MutableBlobMetadataImpl(), new PutOptions());
@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())); }