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

com.aliyun.uploader.PublicOssUploader Maven / Gradle / Ivy

package com.aliyun.uploader;

import com.aliyun.utils.CommonUtils;
import com.aliyun.enums.Constants;
import com.aliyun.Context;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.edas.model.v20170801.GetPackageStorageCredentialRequest;
import com.aliyuncs.edas.model.v20170801.GetPackageStorageCredentialResponse;

import java.io.File;
import java.util.UUID;

public class PublicOssUploader extends BaseOssUploader {
    private static final String NAME = "Public OSS Uploader";
    private static final String OSS_KEY_PTN = "%s/apps/%s/%s/%s";

    private String edasEndpoint; //for private cloud
    private String regionId;
    private String appId;

    private String generateKey(File file, String keyPrefix) {
        return String.format(OSS_KEY_PTN, keyPrefix, this.appId, UUID.randomUUID().toString(), file.getName());
    }

    private GetPackageStorageCredentialResponse.Credential applyForCredential() {
        try {
            DefaultAcsClient client = Context.getAcsClient();
            GetPackageStorageCredentialRequest request = new GetPackageStorageCredentialRequest();
            String routeKey = CommonUtils.getPopApiRouteKey();
            if (routeKey != null) {
                request.putHeaderParameter(Constants.POP_API_ROUTE_KEY, routeKey);
            }
            GetPackageStorageCredentialResponse response = client.getAcsResponse(
                new GetPackageStorageCredentialRequest());

            if (CommonUtils.isEmpty(response) || CommonUtils.isEmpty(response.getCredential()) || CommonUtils.isEmpty(
                response.getCredential().getAccessKeyId())) {
                return null;
            }

            return response.getCredential();
        } catch (Exception ex) {
            return null;
        }
    }

    PublicOssUploader(String edasEndpoint, String regionId, String appId) {
        this.edasEndpoint = edasEndpoint;
        this.regionId = regionId;
        this.appId = appId;
    }

    @Override
    public String getName() {
        return NAME;
    }

    @Override
    public String upload(File file) throws Exception {
        GetPackageStorageCredentialResponse.Credential credential = applyForCredential();
        if (CommonUtils.isEmpty(credential)) {
            throw new Exception(String.format(
                    "Can not get token for uploading, please make sure your ak/sk is correct and network(%s) is ok.",
                    edasEndpoint
            ));
        }
        String bucket = credential.getBucket();
        String key = generateKey(file, credential.getKeyPrefix());
        String ak = credential.getAccessKeyId();
        String sk = credential.getAccessKeySecret();
        String token = credential.getSecurityToken();

        return doUpload(edasEndpoint, this.regionId, bucket, key, file, ak, sk, token);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy