All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ksyun.ks3.service.Ks3Client Maven / Gradle / Ivy

package com.ksyun.ks3.service;

import com.ksyun.ks3.config.Constants;
import com.ksyun.ks3.dto.*;
import com.ksyun.ks3.dto.CreateBucketConfiguration.REGION;
import com.ksyun.ks3.dto.PostPolicyCondition.MatchingType;
import com.ksyun.ks3.exception.Ks3ClientException;
import com.ksyun.ks3.exception.Ks3ServiceException;
import com.ksyun.ks3.exception.client.ClientIllegalArgumentException;
import com.ksyun.ks3.exception.client.ClientIllegalArgumentExceptionGenerator;
import com.ksyun.ks3.exception.serviceside.NotFoundException;
import com.ksyun.ks3.http.Ks3CoreController;
import com.ksyun.ks3.http.Request;
import com.ksyun.ks3.http.RequestBuilder;
import com.ksyun.ks3.service.request.*;
import com.ksyun.ks3.service.response.*;
import com.ksyun.ks3.utils.AuthUtils;
import com.ksyun.ks3.utils.DateUtils;
import com.ksyun.ks3.utils.DateUtils.DATETIME_PROTOCOL;
import com.ksyun.ks3.utils.StringUtils;
import org.apache.commons.codec.binary.Base64;
import org.joda.time.DateTime;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.SignatureException;
import java.util.*;
import java.util.Map.Entry;

/**
 * @author lijunwei[[email protected]]  
 * @date 2014年10月14日 下午5:30:30
 * @description ks3客户端,用户使用时需要先初始化一个Ks3Client进行操作
 **/
public class Ks3Client implements Ks3 {

    /**
     * @deprecated 该客户端用于杭州(中国标准)bucket的文件上传下载、分块上传
     */
    public static final Ks3Client Ks3ClientForHZStream = new Ks3Client().withKs3config(new Ks3ClientConfig().withEndpoint("kssws.ks-cdn.com"));
    /**
     * @deprecated 该客户端用于杭州(中国标准)bucket的除文件上传下载、分块上传以外的其他操作
     */
    public static final Ks3Client Ks3ClientForHZControl = new Ks3Client().withKs3config(new Ks3ClientConfig().withEndpoint("kss.ksyun.com"));
    /**
     * @deprecated 该客户端用于美国(圣克拉拉)bucket
     */
    public static final Ks3Client Ks3ClientForUS = new Ks3Client().withKs3config(new Ks3ClientConfig().withEndpoint("ks3-us-west-1.ksyun.com"));


    private Ks3ClientConfig ks3config = new Ks3ClientConfig();
    private Authorization auth;

    public void setAuth(Authorization auth) {
        this.auth = auth;
    }

    public Ks3Client withAuth(Authorization auth) {
        this.auth = auth;
        return this;
    }

    public void setEndpoint(String endpoint) {
        if (this.ks3config == null) {
            ks3config = new Ks3ClientConfig();
        }
        this.ks3config.setEndpoint(endpoint);
    }

    public Ks3Client withEndpoint(String endpoint) {
        this.setEndpoint(endpoint);
        return this;
    }

    public void setPathAccessStyle(boolean pathStyle) {
        if (this.ks3config == null) {
            ks3config = new Ks3ClientConfig();
        }
        this.ks3config.setPathStyleAccess(pathStyle);
    }

    public Ks3Client withPathStyleAccess(boolean pathStyle) {
        this.setPathAccessStyle(pathStyle);
        return this;
    }

    public Ks3ClientConfig getKs3config() {
        return this.ks3config;
    }

    public void setKs3config(Ks3ClientConfig ks3config) {
        this.ks3config = ks3config;
    }

    public Ks3Client withKs3config(Ks3ClientConfig ks3config) {
        this.setKs3config(ks3config);
        return this;
    }

    public Ks3Client() {
        this(null);
    }

    public Ks3Client(Authorization auth) {
        this.auth = auth;
    }

    public Ks3Client(String accesskeyid, String accesskeysecret) {
        this(new Authorization(accesskeyid, accesskeysecret));
    }

    public Ks3Client(String accesskeyid, String accesskeysecret, String securityToken) {
        this(new Authorization(accesskeyid, accesskeysecret, securityToken));
    }

    public Ks3Client(String accesskeyid, String accesskeysecret, Ks3ClientConfig config) {
        if (config.getVersion() == Ks3ClientConfig.SignerVersion.V4 && config.getRegion() == null)
            throw new Ks3ClientException("V4Signer must set region");
        this.auth = new Authorization(accesskeyid, accesskeysecret);
        this.ks3config = config;
    }

    public Ks3Client(String accesskeyid, String accesskeysecret, String securityToken, Ks3ClientConfig config) {
        this.auth = new Authorization(accesskeyid, accesskeysecret, securityToken);
        this.ks3config = config;
    }

    private Ks3CoreController client = new Ks3CoreController();

    public List listBuckets() throws Ks3ClientException,
            Ks3ServiceException {
        return listBuckets(new ListBucketsRequest());
    }

    public List listBuckets(ListBucketsRequest request)
            throws Ks3ClientException, Ks3ServiceException {

        return client.execute(ks3config, auth, request, ListBucketsResponse.class);
    }

    public REGION getBucketLoaction(String bucketName)
            throws Ks3ClientException, Ks3ServiceException {
        GetBucketLocationRequest request = new GetBucketLocationRequest(
                bucketName);
        return this.getBucketLoaction(request);
    }

    public REGION getBucketLoaction(GetBucketLocationRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return this.client.execute(ks3config, auth, request,
                GetBucketLocationResponse.class);
    }

    public void putBucketReplicationConfiguration(String bucketName, ReplicationRule rule)
            throws Ks3ClientException, Ks3ServiceException {
        PutBucketReplicationConfigurationRequest request = new PutBucketReplicationConfigurationRequest(bucketName, rule);
        this.putBucketReplicationConfiguration(request);
    }

    public ReplicationRule getBucketReplicationConfiguration(String bucketName)
            throws Ks3ClientException, Ks3ServiceException {
        GetBucketReplicationConfigurationRequest request = new GetBucketReplicationConfigurationRequest(bucketName);
        return client.execute(ks3config, auth, request, GetBucketReplicationConfigurationResponse.class);
    }

    public void deleteBucketReplicationConfiguration(String bucketName)
            throws Ks3ClientException, Ks3ServiceException {
        DeleteBucketReplicationConfigurationRequest request = new DeleteBucketReplicationConfigurationRequest(bucketName);
        client.execute(ks3config, auth, request, DeleteBucketReplicationConfigurationResponse.class);
    }

    public void putBucketReplicationConfiguration(PutBucketReplicationConfigurationRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, PutBucketReplicationConfigurationResponse.class);
    }

    public BucketLoggingStatus getBucketLogging(String bucketName)
            throws Ks3ClientException, Ks3ServiceException {
        GetBucketLoggingRequest request = new GetBucketLoggingRequest(
                bucketName);
        return this.getBucketLogging(request);
    }

    public BucketLoggingStatus getBucketLogging(GetBucketLoggingRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, GetBucketLoggingResponse.class);
    }

    public void putBucketLogging(String bucketName, boolean enable,
                                 String targetBucket) throws Ks3ClientException, Ks3ServiceException {
        PutBucketLoggingRequest request = new PutBucketLoggingRequest(
                bucketName, enable, targetBucket);
        this.putBucketLogging(request);

    }

    public void putBucketLogging(String bucketName, boolean enable,
                                 String targetBucket, String targetPrefix)
            throws Ks3ClientException, Ks3ServiceException {
        PutBucketLoggingRequest request = new PutBucketLoggingRequest(
                bucketName, enable, targetBucket, targetPrefix);
        this.putBucketLogging(request);
    }

    public void putBucketLogging(PutBucketLoggingRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, PutBucketLoggingResponse.class);
    }

    public AccessControlPolicy getBucketACL(String bucketName)
            throws Ks3ClientException, Ks3ServiceException {
        return getBucketACL(new GetBucketACLRequest(bucketName));
    }

    public CannedAccessControlList getBucketCannedACL(String bucketName)
            throws Ks3ClientException, Ks3ServiceException {
        return this.getBucketACL(bucketName).getCannedAccessControlList();
    }

    public CannedAccessControlList getBucketCannedACL(
            GetBucketACLRequest request) throws Ks3ClientException,
            Ks3ServiceException {
        return this.getBucketACL(request).getCannedAccessControlList();
    }

    public AccessControlPolicy getBucketACL(GetBucketACLRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, GetBucketACLResponse.class);
    }

    public void putBucketACL(String bucketName,
                             AccessControlList accessControlList) throws Ks3ClientException,
            Ks3ServiceException {
        putBucketACL(new PutBucketACLRequest(bucketName, accessControlList));
    }

    public void putBucketACL(PutBucketACLRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, PutBucketACLResponse.class);
    }

    public void putObjectACL(String bucketName, String objectName,
                             AccessControlList accessControlList) throws Ks3ClientException,
            Ks3ServiceException {
        putObjectACL(new PutObjectACLRequest(bucketName, objectName,
                accessControlList));
    }

    public void putObjectACL(PutObjectACLRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, PutObjectACLResponse.class);
    }

    public AccessControlPolicy getObjectACL(String bucketName, String objectName)
            throws Ks3ClientException, Ks3ServiceException {
        return getObjectACL(new GetObjectACLRequest(bucketName, objectName));
    }

    public AccessControlPolicy getObjectACL(String bucketName, String objectName, String versionId)
            throws Ks3ClientException, Ks3ServiceException {
        return getObjectACL(new GetObjectACLRequest(bucketName, objectName, versionId));
    }

    public CannedAccessControlList getObjectCannedACL(String bucketName,
                                                      String ObjectName) throws Ks3ClientException, Ks3ServiceException {
        return this.getObjectACL(bucketName, ObjectName).getCannedAccessControlList();
    }

    public CannedAccessControlList getObjectCannedACL(String bucketName,
                                                      String ObjectName, String versionId) throws Ks3ClientException, Ks3ServiceException {
        return this.getObjectACL(bucketName, ObjectName, versionId).getCannedAccessControlList();
    }

    public CannedAccessControlList getObjectCannedACL(
            GetObjectACLRequest request) throws Ks3ClientException,
            Ks3ServiceException {
        return this.getObjectACL(request).getCannedAccessControlList();
    }

    public AccessControlPolicy getObjectACL(GetObjectACLRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, GetObjectACLResponse.class);
    }

    public Bucket createBucket(String bucketname) throws Ks3ClientException,
            Ks3ServiceException {
        return createBucket(new CreateBucketRequest(bucketname));
    }

    public Bucket createBucket(CreateBucketRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        Bucket bucket = client.execute(ks3config, auth, request,
                CreateBucketResponse.class);
        bucket.setName(request.getBucket());
        return bucket;
    }


    public void makeDir(String bucketName, String dir)
            throws Ks3ClientException, Ks3ServiceException {
        if (!dir.endsWith("/"))
            throw ClientIllegalArgumentExceptionGenerator.notCorrect("dir", dir, "ends with /");
        PutObjectRequest request = new PutObjectRequest(bucketName, dir,
                new ByteArrayInputStream(new byte[]{}), null);
        this.putObject(request);
    }


    public void deleteBucket(String bucketname) throws Ks3ClientException,
            Ks3ServiceException {
        deleteBucket(new DeleteBucketRequest(bucketname));

    }

    public void deleteBucket(DeleteBucketRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, DeleteBucketResponse.class);
    }

    public ObjectVersionsListing listObjectVersions(String bucketname)
            throws Ks3ClientException, Ks3ServiceException {
        return listObjectVersions(new ListObjectVersionsRequest(bucketname, null, null, null,
                null, null));
    }

    public ObjectListing listObjects(String bucketname)
            throws Ks3ClientException, Ks3ServiceException {
        return listObjects(new ListObjectsRequest(bucketname, null, null, null,
                null));
    }

    public ObjectListing listObjects(String bucketname, String prefix)
            throws Ks3ClientException, Ks3ServiceException {
        return listObjects(new ListObjectsRequest(bucketname, prefix, null,
                null, null));
    }

    public ObjectVersionsListing listObjectVersions(String bucketname, String prefix)
            throws Ks3ClientException, Ks3ServiceException {
        return listObjectVersions(new ListObjectVersionsRequest(bucketname, prefix, null,
                null, null, null));
    }

    public ObjectListing listObjects(ListObjectsRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, ListObjectsResponse.class);
    }

    public ObjectListingV2 listObjectsV2(String bucketName)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, new ListObjectsV2Request(bucketName), ListObjectsV2Response.class);
    }
    public ObjectListingV2 listObjectsV2(String bucketName, String prefix)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, new ListObjectsV2Request(bucketName,prefix,null,null,null,null,false,null),
                ListObjectsV2Response.class);
    }
    public ObjectListingV2 listObjectsV2(ListObjectsV2Request request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, ListObjectsV2Response.class);
    }

    public ObjectVersionsListing listObjectVersions(ListObjectVersionsRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, ListObjectVersionsResponse.class);
    }

    public void deleteObject(String bucketname, String key)
            throws Ks3ClientException, Ks3ServiceException {
        deleteObject(new DeleteObjectRequest(bucketname, key));
    }

    public void deleteObject(String bucketname, String key, String versionId) throws Ks3ClientException, Ks3ServiceException {
        deleteObject(new DeleteObjectRequest(bucketname, key, versionId));
    }

    public void deleteObject(DeleteObjectRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, DeleteObjectResponse.class);
    }


    public GetObjectResult getObject(String bucketname, String key)
            throws Ks3ClientException, Ks3ServiceException {
        return getObject(new GetObjectRequest(bucketname, key));
    }

    public GetObjectResult getObject(String bucketname, String key, String versionId)
            throws Ks3ClientException, Ks3ServiceException {
        return getObject(new GetObjectRequest(bucketname, key, versionId));
    }

    public GetObjectResult getObject(GetObjectRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        String objectkey = request.getKey();
        GetObjectResult object = client.execute(ks3config, auth, request,
                GetObjectResponse.class);
        object.getObject().setBucketName(request.getBucket());
        object.getObject().setKey(objectkey);
        return object;
    }

    public String generatePresignedUrl(String bucket, String key, int expiration)
            throws Ks3ClientException {
        return generatePresignedUrl(bucket, key, expiration, null);
    }

    public String generatePresignedUrl(String bucket, String key, String versionId, int expiration)
            throws Ks3ClientException {
        return generatePresignedUrl(bucket, key, versionId, expiration, null);
    }

    public String generatePresignedUrl(String bucket, String key, String versionId,
                                       int expiration, ResponseHeaderOverrides overrides)
            throws Ks3ClientException {
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest();
        request.setBucket(bucket);
        request.setKey(key);
        request.setVersionId(versionId);
        request.setExpiration(new Date(System.currentTimeMillis() + expiration * 1000L));
        request.setResponseHeaders(overrides);
        return generatePresignedUrl(request);
    }

    public String generatePresignedUrl(String bucket, String key,
                                       int expiration, ResponseHeaderOverrides overrides)
            throws Ks3ClientException {
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest();
        request.setBucket(bucket);
        request.setKey(key);
        request.setExpiration(new Date(System.currentTimeMillis() + expiration * 1000L));
        request.setResponseHeaders(overrides);
        return generatePresignedUrl(request);
    }

    public String generatePresignedUrl(GeneratePresignedUrlRequest request) throws Ks3ClientException {
        if (auth == null || StringUtils.isBlank(auth.getAccessKeyId())
                || StringUtils.isBlank(auth.getAccessKeySecret()))
            throw new Ks3ClientException(
                    "AccessKeyId or AccessKeySecret can't be null");
        if (ks3config == null)
            ks3config = new Ks3ClientConfig();
        Request req = new Request();
        RequestBuilder.buildRequest(request, req, auth, ks3config);
        return req.toUrl(ks3config);
    }

    public HeadBucketResult headBucket(String bucketname)
            throws Ks3ClientException, Ks3ServiceException {
        return this.headBucket(new HeadBucketRequest(bucketname));
    }

    public HeadBucketResult headBucket(HeadBucketRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, HeadBucketResponse.class);
    }

    public boolean bucketExists(String bucketname) throws Ks3ClientException,
            Ks3ServiceException {
        try {
            HeadBucketResult result = this.headBucket(bucketname);
            if (result.getStatueCode() == 404)
                return false;
            if (result.getStatueCode() == 200 || result.getStatueCode() == 301
                    || result.getStatueCode() == 403)
                return true;
            return false;
        } catch (Ks3ClientException e) {
            return false;
        }
    }

    public PutObjectResult putObject(String bucketname, String objectkey,
                                     File file) throws Ks3ClientException, Ks3ServiceException {
        return putObject(new PutObjectRequest(bucketname, objectkey, file));
    }

    public PutObjectResult putObject(String bucketname, String objectkey,
                                     InputStream inputstream, ObjectMetadata objectmeta)
            throws Ks3ClientException, Ks3ServiceException {
        return putObject(new PutObjectRequest(bucketname, objectkey,
                inputstream, objectmeta));
    }

    public PutObjectResult putObject(String bucketname, String objectkey,
                                     String content) throws Ks3ClientException, Ks3ServiceException {
        InputStream inputstream = new ByteArrayInputStream(content.getBytes());
        ObjectMetadata objectmeta = new ObjectMetadata();
        return putObject(new PutObjectRequest(bucketname, objectkey,
                inputstream, objectmeta));
    }

    public PutObjectResult putObject(PutObjectRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        PutObjectResult obj = client.execute(ks3config, auth, request,
                PutObjectResponse.class);
        return obj;
    }

    public CopyResult copyObject(String destinationBucket,
                                 String destinationObject, String sourceBucket, String sourceKey)
            throws Ks3ClientException, Ks3ServiceException {
        CopyObjectRequest request = new CopyObjectRequest(destinationBucket,
                destinationObject, sourceBucket, sourceKey);
        return this.copyObject(request);
    }

    public CopyResult copyObject(String destinationBucket,
                                 String destinationObject, String sourceBucket, String sourceKey,
                                 CannedAccessControlList cannedAcl) throws Ks3ClientException,
            Ks3ServiceException {
        CopyObjectRequest request = new CopyObjectRequest(destinationBucket,
                destinationObject, sourceBucket, sourceKey, cannedAcl);
        return this.copyObject(request);
    }

    public CopyResult copyObject(String destinationBucket,
                                 String destinationObject, String sourceBucket, String sourceKey,
                                 AccessControlList accessControlList) throws Ks3ClientException,
            Ks3ServiceException {
        CopyObjectRequest request = new CopyObjectRequest(destinationBucket,
                destinationObject, sourceBucket, sourceKey, accessControlList);
        return this.copyObject(request);
    }

    public CopyResult copyObject(CopyObjectRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, CopyObjectResponse.class);
    }

    public HeadObjectResult headObject(String bucketname, String objectkey)
            throws Ks3ClientException, Ks3ServiceException {
        return headObject(new HeadObjectRequest(bucketname, objectkey));
    }

    public HeadObjectResult headObject(String bucketname, String objectkey, String versionId)
            throws Ks3ClientException, Ks3ServiceException {
        return headObject(new HeadObjectRequest(bucketname, objectkey, versionId));
    }

    public HeadObjectResult headObject(HeadObjectRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, HeadObjectResponse.class);
    }

    public boolean objectExists(String bucket, String key) {
        try {
            this.headObject(bucket, key);
        } catch (NotFoundException e) {
            return false;
        }
        return true;
    }

    public boolean objectExists(String bucket, String key, SSECustomerKey sseKey) {
        try {
            HeadObjectRequest request = new HeadObjectRequest(bucket, key);
            request.setSseCustomerKey(sseKey);
            this.headObject(request);
        } catch (NotFoundException e) {
            return false;
        }
        return true;
    }

    public InitiateMultipartUploadResult initiateMultipartUpload(
            String bucketname, String objectkey) throws Ks3ClientException,
            Ks3ServiceException {
        return initiateMultipartUpload(new InitiateMultipartUploadRequest(
                bucketname, objectkey));
    }

    public InitiateMultipartUploadResult initiateMultipartUpload(
            InitiateMultipartUploadRequest request) throws Ks3ClientException,
            Ks3ServiceException {
        String objectkey = request.getKey();
        InitiateMultipartUploadResult result = client.execute(ks3config, auth, request,
                InitiateMultipartUploadResponse.class);
        result.setBucket(request.getBucket());
        result.setKey(objectkey);
        return result;
    }

    public PartETag uploadPart(UploadPartRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        PartETag result = client.execute(ks3config, auth, request,
                UploadPartResponse.class);
        result.setPartNumber(request.getPartNumber());
        return result;
    }

    public CopyResult copyPart(CopyPartRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, CopyPartResponse.class);
    }

    public CompleteMultipartUploadResult completeMultipartUpload(
            String bucketname, String objectkey, String uploadId,
            List partETags) throws Ks3ClientException,
            Ks3ServiceException {
        return completeMultipartUpload(new CompleteMultipartUploadRequest(
                bucketname, objectkey, uploadId, partETags));
    }

    public CompleteMultipartUploadResult completeMultipartUpload(
            ListPartsResult result) throws Ks3ClientException,
            Ks3ServiceException {
        return completeMultipartUpload(new CompleteMultipartUploadRequest(
                result));
    }

    public CompleteMultipartUploadResult completeMultipartUpload(
            CompleteMultipartUploadRequest request) throws Ks3ClientException,
            Ks3ServiceException {
        return client.execute(ks3config, auth, request,
                CompleteMultipartUploadResponse.class);
    }

    public void abortMultipartUpload(String bucketname, String objectkey,
                                     String uploadId) throws Ks3ClientException, Ks3ServiceException {
        this.abortMultipartUpload(new AbortMultipartUploadRequest(bucketname,
                objectkey, uploadId));
    }

    public void abortMultipartUpload(AbortMultipartUploadRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        this.client.execute(ks3config, auth, request, AbortMultipartUploadResponse.class);
    }

    public ListPartsResult listParts(String bucketname, String objectkey,
                                     String uploadId) throws Ks3ClientException, Ks3ServiceException {
        ListPartsRequest request = new ListPartsRequest(bucketname, objectkey,
                uploadId);
        return listParts(request);
    }

    public ListPartsResult listParts(String bucketname, String objectkey,
                                     String uploadId, int maxParts) throws Ks3ClientException,
            Ks3ServiceException {
        ListPartsRequest request = new ListPartsRequest(bucketname, objectkey,
                uploadId);
        request.setMaxParts(maxParts);
        return listParts(request);
    }

    public ListPartsResult listParts(String bucketname, String objectkey,
                                     String uploadId, int maxParts, int partNumberMarker)
            throws Ks3ClientException, Ks3ServiceException {
        ListPartsRequest request = new ListPartsRequest(bucketname, objectkey,
                uploadId);
        request.setMaxParts(maxParts);
        request.setPartNumberMarker(partNumberMarker);
        return listParts(request);
    }

    public ListPartsResult listParts(ListPartsRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, ListPartsResponse.class);
    }

    public void putObjectACL(String bucketName, String objectName,
                             CannedAccessControlList accessControlList)
            throws Ks3ClientException, Ks3ServiceException {
        putObjectACL(new PutObjectACLRequest(bucketName, objectName,
                accessControlList));
    }

    public void putBucketACL(String bucketName,
                             CannedAccessControlList CannedAcl) throws Ks3ClientException,
            Ks3ServiceException {
        this.putBucketACL(new PutBucketACLRequest(bucketName, CannedAcl));
    }


    public ListMultipartUploadsResult listMultipartUploads(String bucketName)
            throws Ks3ClientException, Ks3ServiceException {
        ListMultipartUploadsRequest request = new ListMultipartUploadsRequest(
                bucketName);
        return this.listMultipartUploads(request);
    }

    public ListMultipartUploadsResult listMultipartUploads(String bucketName,
                                                           String prefix) throws Ks3ClientException, Ks3ServiceException {
        ListMultipartUploadsRequest request = new ListMultipartUploadsRequest(
                bucketName, prefix);
        return this.listMultipartUploads(request);
    }

    public ListMultipartUploadsResult listMultipartUploads(String bucketName,
                                                           String prefix, String keyMarker, String uploadIdMarker)
            throws Ks3ClientException, Ks3ServiceException {
        ListMultipartUploadsRequest request = new ListMultipartUploadsRequest(
                bucketName, prefix, keyMarker, uploadIdMarker);
        return this.listMultipartUploads(request);
    }

    public ListMultipartUploadsResult listMultipartUploads(
            ListMultipartUploadsRequest request) throws Ks3ClientException,
            Ks3ServiceException {
        return client
                .execute(ks3config, auth, request, ListMultipartUploadsResponse.class);
    }

    public void putBucketCors(PutBucketCorsRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, PutBucketCorsResponse.class);
    }

    public BucketCorsConfiguration getBucketCors(String bucketname)
            throws Ks3ClientException, Ks3ServiceException {
        return getBucketCors(new GetBucketCorsRequest(bucketname));
    }

    public BucketCorsConfiguration getBucketCors(GetBucketCorsRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, GetBucketCorsResponse.class);
    }

    public void deleteBucketCors(String bucketname) throws Ks3ClientException,
            Ks3ServiceException {
        deleteBucketCors(new DeleteBucketCorsRequest(bucketname));
    }

    public void deleteBucketCors(DeleteBucketCorsRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, DeleteBucketCorsResponse.class);
    }

    public , Y> Y execute(
            Ks3WebServiceRequest request, Class clazz)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, clazz);
    }

    public PostObjectFormFields postObject(PostPolicy policy)
            throws Ks3ClientException {
        Map policyMap = new HashMap();
        policyMap.put("expiration", policy.getExpiration());

        List> conditions = new ArrayList>();
        for (PostPolicyCondition condition : policy.getConditions()) {
            List conditionList = new ArrayList();
            if (condition.getMatchingType() != MatchingType.contentLengthRange) {
                if (!condition.getParamA().startsWith("$")) {
                    condition.setParamA("$" + condition.getParamA());
                }
            } else {
                if (!StringUtils.checkLong(condition.getParamA()) || !StringUtils.checkLong(condition.getParamB())) {
                    throw new ClientIllegalArgumentException("contentLengthRange匹配规则的参数A和参数B都应该是Long型");
                }
            }
            conditionList.add(condition.getMatchingType().toString());
            //表单中的项是忽略大小写的
            if (condition.getMatchingType() != MatchingType.contentLengthRange && !Constants.postFormUnIgnoreCase.contains(condition.getParamA().substring(1))) {
                conditionList.add(condition.getParamA().toLowerCase());
            } else {
                conditionList.add(condition.getParamA());
            }
            conditionList.add(condition.getParamB());
            conditions.add(conditionList);
        }
        policyMap.put("conditions", conditions);
        String policyJson = StringUtils.object2json(policyMap);
        String policyBase64 = "";
        try {
            policyBase64 = new String(Base64.encodeBase64(policyJson.getBytes()), "UTF-8");
        } catch (UnsupportedEncodingException e) {
            //unexpected
        }
        PostObjectFormFields fields = new PostObjectFormFields();
        fields.setKssAccessKeyId(auth.getAccessKeyId());
        fields.setPolicy(policyBase64);
        try {
            fields.setSignature(AuthUtils.calcSignature(auth.getAccessKeySecret(), policyBase64));
        } catch (SignatureException e) {
            throw new Ks3ClientException("计算签名出错", e);
        }
        return fields;
    }

    public PostObjectFormFields postObject(String bucket, String filename,
                                           Map postFormData, List unknowValueFormFiled) throws Ks3ClientException {
        if (StringUtils.isBlank(bucket))
            throw ClientIllegalArgumentExceptionGenerator.notNull("bucket");
        if (postFormData == null)
            postFormData = new HashMap();
        if (unknowValueFormFiled == null)
            unknowValueFormFiled = new ArrayList();
        postFormData.put("bucket", bucket);
        PostPolicy policy = new PostPolicy();
        //签名将在五小时后过期
        policy.setExpiration(DateUtils.convertDate2Str(new DateTime().plusHours(5).toDate(), DATETIME_PROTOCOL.ISO8861));

        for (Entry entry : postFormData.entrySet()) {
            if (!Constants.postFormIgnoreFields.contains(entry.getKey())) {
                PostPolicyCondition condition = new PostPolicyCondition();
                condition.setMatchingType(MatchingType.eq);
                condition.setParamA("$" + entry.getKey());
                condition.setParamB(entry.getValue().replace("${filename}", filename));
                policy.getConditions().add(condition);
            }
        }
        for (String field : unknowValueFormFiled) {
            if (!Constants.postFormIgnoreFields.contains(field)) {
                PostPolicyCondition condition = new PostPolicyCondition();
                condition.setMatchingType(MatchingType.startsWith);
                condition.setParamA("$" + field);
                condition.setParamB("");
                policy.getConditions().add(condition);
            }
        }
        return postObject(policy);
    }

    public PutAdpResult putAdpTask(String bucketName, String objectKey,
                                   List adps) throws Ks3ClientException, Ks3ServiceException {
        PutAdpRequest request = new PutAdpRequest(bucketName, objectKey, adps);
        return putAdpTask(request);
    }

    public PutAdpResult putAdpTask(String bucketName, String objectKey,
                                   List adps, String notifyURL) throws Ks3ClientException,
            Ks3ServiceException {
        PutAdpRequest request = new PutAdpRequest(bucketName, objectKey, adps);
        request.setNotifyURL(notifyURL);
        return putAdpTask(request);
    }

    public PutAdpResult putAdpTask(PutAdpRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, PutAdpResponse.class);
    }

    public AdpTask getAdpTask(String taskid) throws Ks3ClientException,
            Ks3ServiceException {
        GetAdpRequest request = new GetAdpRequest(taskid);
        return getAdpTask(request);
    }


    public AdpTask getAdpTask(GetAdpRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, GetAdpResponse.class);
    }

    public void putBucketLifecycle(PutBucketLifecycleRequest request)
            throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, PutBucketLifecycleResponse.class);
    }

    public BucketLifecycleConfiguration getBucketLifecycle(String bucket) {
        GetBucketLifecycleRequest request = new GetBucketLifecycleRequest(bucket);
        return client.execute(ks3config, auth, request, GetBucketLifecycleResponse.class);
    }

    public void deleteBucketLifecycle(String bucket) {
        DeleteBucketLifecycleRequest requst = new DeleteBucketLifecycleRequest(bucket);
        client.execute(ks3config, auth, requst, DeleteBucketLifecycleResponse.class);

    }

    public void putBucketLifecycle(String bucket, BucketLifecycleConfiguration bucketLifecycleConfiguration) {
        PutBucketLifecycleRequest request = new PutBucketLifecycleRequest(bucket, bucketLifecycleConfiguration);
        client.execute(ks3config, auth, request, PutBucketLifecycleResponse.class);
    }

    public BucketLifecycleConfiguration getBucketLifecycle(GetBucketLifecycleRequest request) {
        return client.execute(ks3config, auth, request, GetBucketLifecycleResponse.class);
    }

    public void deleteBucketLifecycle(DeleteBucketLifecycleRequest request) {
        client.execute(ks3config, auth, request, DeleteBucketLifecycleResponse.class);

    }

    public Ks3Result putObjectFetch(String bucketName, String objectKey, String sourceUrl) {
        PutObjectFetchRequest request = new PutObjectFetchRequest(bucketName, objectKey, sourceUrl);
        return client.execute(ks3config, auth, request, PutObjectFetchResponse.class);

    }

    public Ks3Result putObjectFetch(PutObjectFetchRequest request) {
        return client.execute(ks3config, auth, request, PutObjectFetchResponse.class);
    }

    public RestoreObjectResult restoreObject(String bucketName, String objectKey) {
        return restoreObject(new RestoreObjectRequest(bucketName, objectKey));
    }

    public RestoreObjectResult restoreObject(RestoreObjectRequest request) {
        return client.execute(ks3config, auth, request, RestoreObjectResponse.class);
    }

    public void putObjectTagging(String bucketName, String objectName, ObjectTagging objectTagging) {
        PutObjectTaggingRequest request = new PutObjectTaggingRequest(bucketName, objectName, objectTagging);
        client.execute(ks3config, auth, request, PutObjectTaggingResponse.class);
    }

    public void putObjectTagging(PutObjectTaggingRequest request) {
        client.execute(ks3config, auth, request, PutObjectTaggingResponse.class);
    }

    public ObjectTagging getObjectTagging(String bucketName, String objectName) {
        GetObjectTaggingRequest request = new GetObjectTaggingRequest(bucketName, objectName);
        return client.execute(ks3config, auth, request, GetObjectTaggingResponse.class);
    }

    public ObjectTagging getObjectTagging(String bucketName, String objectName, String versionId) {
        GetObjectTaggingRequest request = new GetObjectTaggingRequest(bucketName, objectName, versionId);
        return client.execute(ks3config, auth, request, GetObjectTaggingResponse.class);
    }

    public ObjectTagging getObjectTagging(GetObjectTaggingRequest request) {
        return client.execute(ks3config, auth, request, GetObjectTaggingResponse.class);
    }

    public void deleteObjectTagging(String bucketName, String objectName) {
        DeleteObjectTaggingRequest request = new DeleteObjectTaggingRequest(bucketName, objectName);
        client.execute(ks3config, auth, request, DeleteObjectTaggingResponse.class);
    }

    public void deleteObjectTagging(DeleteObjectTaggingRequest request) {
        client.execute(ks3config, auth, request, DeleteObjectTaggingResponse.class);
    }

    public AppendObjectResult appendObject(AppendObjectRequest request) throws Ks3ClientException, Ks3ServiceException {
        AppendObjectResult obj = client.execute(ks3config, auth, request, AppendObjectResponse.class);
        return obj;
    }

    public void putBucketPolicy(String bucket, String policy) throws Ks3ClientException, Ks3ServiceException {
        PutBucketPolicyRequest request = new PutBucketPolicyRequest(bucket, policy);
        client.execute(ks3config, auth, request, PutBucketPolicyResponse.class);
    }

    public void putBucketPolicy(PutBucketPolicyRequest request) throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, PutBucketPolicyResponse.class);
    }

    public BucketPolicy getBucketPolicy(GetBucketPolicyRequest request) throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, GetBucketPolicyResponse.class);
    }

    public BucketPolicy getBucketPolicy(String bucketName) throws Ks3ClientException, Ks3ServiceException {
        GetBucketPolicyRequest request = new GetBucketPolicyRequest(bucketName);
        return client.execute(ks3config, auth, request, GetBucketPolicyResponse.class);
    }

    public void deleteBucketPolicy(DeleteBucketPolicyRequest request) throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, DeleteBucketPolicyResponse.class);
    }

    public void putBucketStorageQuota(String bucket, Long quota) throws Ks3ClientException, Ks3ServiceException {
        PutBucketStorageQuotaRequest request = new PutBucketStorageQuotaRequest(bucket, quota);
        client.execute(ks3config, auth, request, PutBucketQuotaResponse.class);
    }

    public void putBucketStorageQuota(PutBucketStorageQuotaRequest request) throws Ks3ClientException, Ks3ServiceException {
        client.execute(ks3config, auth, request, PutBucketQuotaResponse.class);
    }

    public BucketStorageQuota getBucketStorageQuota(String bucketName) throws Ks3ClientException, Ks3ServiceException {
        GetBucketStorageQuotaRequest request = new GetBucketStorageQuotaRequest(bucketName);
        return client.execute(ks3config, auth, request, GetBucketStorageQuotaResponse.class);
    }

    public BucketStorageQuota getBucketStorageQuota(GetBucketStorageQuotaRequest request) throws Ks3ClientException, Ks3ServiceException {
        return client.execute(ks3config, auth, request, GetBucketStorageQuotaResponse.class);
    }

    @Override
    public void setBucketVersioning(String bucketName, BucketVersioningConfiguration configuration) {
        SetBucketVersioningRequest request = new SetBucketVersioningRequest(bucketName, configuration);
        client.execute(ks3config, auth, request, SetBucketVersioningResponse.class);
    }

    @Override
    public void setBucketVersioning(SetBucketVersioningRequest request) {
        client.execute(ks3config, auth, request, SetBucketVersioningResponse.class);
    }

    @Override
    public BucketVersioningConfiguration getBucketVersioning(String bucketName) {
        GetBucketVersioningRequest request = new GetBucketVersioningRequest(bucketName);
        return client.execute(ks3config, auth, request, GetBucketVersioningResponse.class);
    }

    @Override
    public BucketVersioningConfiguration getBucketVersioning(GetBucketVersioningRequest request) {
        return client.execute(ks3config, auth, request, GetBucketVersioningResponse.class);
    }

    @Override
    public InitiateBucketWormResult initiateBucketWorm(InitiateBucketWormRequest request) {
        return client.execute(ks3config, auth, request, InitiateBucketWormResponse.class);
    }

    @Override
    public InitiateBucketWormResult initiateBucketWorm(String bucketName, int retentionPeriodInDays) {
        InitiateBucketWormRequest request = new InitiateBucketWormRequest(bucketName, retentionPeriodInDays);
        return client.execute(ks3config, auth, request, InitiateBucketWormResponse.class);
    }

    @Override
    public void completeBucketWorm(CompleteBucketWormRequest request) {
        client.execute(ks3config, auth, request, CompleteBucketWormResponse.class);
    }

    @Override
    public void completeBucketWorm(String bucketName, String wormId) {
        CompleteBucketWormRequest request = new CompleteBucketWormRequest(bucketName, wormId);
        client.execute(ks3config, auth, request, CompleteBucketWormResponse.class);
    }

    @Override
    public void extendBucketWorm(ExtendBucketWormRequest request) {
        client.execute(ks3config, auth, request, ExtendBucketWormResponse.class);
    }

    @Override
    public void extendBucketWorm(String bucketName, String wormId, int retentionPeriodInDays) {
        ExtendBucketWormRequest request = new ExtendBucketWormRequest(bucketName, wormId, retentionPeriodInDays);
        client.execute(ks3config, auth, request, ExtendBucketWormResponse.class);
    }

    @Override
	public void abortBucketWorm(AbortBucketWormRequest request){
    	client.execute(ks3config,auth,request,AbortBucketWormResponse.class);
	}

	@Override
	public void abortBucketWorm(String bucketName){
    	AbortBucketWormRequest request = new AbortBucketWormRequest(bucketName);
		client.execute(ks3config,auth,request,AbortBucketWormResponse.class);
	}

	@Override
    public GetBucketWormResult getBucketWorm(GetBucketWormRequest request){
        return client.execute(ks3config,auth,request,GetBucketWormResponse.class);
    }

    @Override
    public GetBucketWormResult getBucketWorm(String bucketName){
        GetBucketWormRequest request = new GetBucketWormRequest(bucketName);
        return client.execute(ks3config,auth,request,GetBucketWormResponse.class);
    }

    @Override
    public void putBucketEncryption(String bucketName, ServerSideEncryptionConfiguration serverSideEncryptionConfiguration){
        PutBucketEncryptionRequest request = new PutBucketEncryptionRequest(bucketName, serverSideEncryptionConfiguration);
        client.execute(ks3config,auth,request,PutBucketEncryptionResponse.class);
    }

    @Override
    public void putBucketEncryption(PutBucketEncryptionRequest request){
        client.execute(ks3config,auth,request,PutBucketEncryptionResponse.class);
    }

    @Override
    public GetBucketEncryptionResult getBucketEncryption(String bucketName){
        GetBucketEncryptionRequest request = new GetBucketEncryptionRequest(bucketName);
        return client.execute(ks3config,auth,request,GetBucketEncryptionResponse.class);
    }

    @Override
    public GetBucketEncryptionResult getBucketEncryption(GetBucketEncryptionRequest request){
        return client.execute(ks3config,auth,request,GetBucketEncryptionResponse.class);
    }

    @Override
    public void deleteBucketEncryption(String bucketName){
        DeleteBucketEncryptionRequest request = new DeleteBucketEncryptionRequest(bucketName);
        client.execute(ks3config,auth,request,DeleteBucketEncryptionResponse.class);
    }

    @Override
    public void deleteBucketEncryption(DeleteBucketEncryptionRequest request){
        client.execute(ks3config,auth,request,DeleteBucketEncryptionResponse.class);
    }




}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy