
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