public CompleteMultipartUploadResult completeMultipartUpload()

in src/main/java/com/aliyun/oss/internal/OSSMultipartOperation.java [147:211]


    public CompleteMultipartUploadResult completeMultipartUpload(
            CompleteMultipartUploadRequest completeMultipartUploadRequest) throws OSSException, ClientException {

        assertParameterNotNull(completeMultipartUploadRequest, "completeMultipartUploadRequest");

        String key = completeMultipartUploadRequest.getKey();
        String bucketName = completeMultipartUploadRequest.getBucketName();
        String uploadId = completeMultipartUploadRequest.getUploadId();

        assertParameterNotNull(bucketName, "bucketName");
        ensureBucketNameValid(bucketName);
        assertParameterNotNull(key, "key");
        ensureObjectKeyValid(key);
        assertStringNotNullOrEmpty(uploadId, "uploadId");
        ensureCallbackValid(completeMultipartUploadRequest.getCallback());

        Map<String, String> headers = new HashMap<String, String>();
        populateCompleteMultipartUploadOptionalHeaders(completeMultipartUploadRequest, headers);
        populateRequestCallback(headers, completeMultipartUploadRequest.getCallback());

        populateRequestPayerHeader(headers, completeMultipartUploadRequest.getRequestPayer());

        Map<String, String> parameters = new HashMap<String, String>();
        parameters.put(UPLOAD_ID, uploadId);

        List<PartETag> partETags = completeMultipartUploadRequest.getPartETags();
        FixedLengthInputStream requestInstream;
        if (partETags != null) {
            Collections.sort(partETags, new Comparator<PartETag>() {
                @Override
                public int compare(PartETag p1, PartETag p2) {
                    return p1.getPartNumber() - p2.getPartNumber();
                }
            });
            requestInstream = completeMultipartUploadRequestMarshaller.marshall(completeMultipartUploadRequest);
        } else {
            requestInstream = new FixedLengthInputStream(new ByteArrayInputStream("".getBytes()), 0);
        }

        RequestMessage request = new OSSRequestMessageBuilder(getInnerClient()).setEndpoint(getEndpoint(completeMultipartUploadRequest))
                .setMethod(HttpMethod.POST).setBucket(bucketName).setKey(key).setHeaders(headers)
                .setParameters(parameters)
                .setInputStreamWithLength(requestInstream)
                .setOriginalRequest(completeMultipartUploadRequest).build();

        List<ResponseHandler> reponseHandlers = new ArrayList<ResponseHandler>();
        reponseHandlers.add(new OSSCallbackErrorResponseHandler());

        CompleteMultipartUploadResult result = null;
        if (!isNeedReturnResponse(completeMultipartUploadRequest)) {
            result = doOperation(request, completeMultipartUploadResponseParser, bucketName, key, true);
        } else {
            result = doOperation(request, completeMultipartUploadProcessResponseParser, bucketName, key, true, null,
                    reponseHandlers);
        }

        if (partETags != null) {
            result.setClientCRC(calcObjectCRCFromParts(partETags));
        }
        if (getInnerClient().getClientConfiguration().isCrcCheckEnabled()) {
            OSSUtils.checkChecksum(result.getClientCRC(), result.getServerCRC(), result.getRequestId());
        }

        return result;
    }