本文档主要介绍KS3 Android SDK的安装和使用。有关KS3详细介绍文档,请参考文档中心。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
SDK以jar包形式呈现。将下载好的的jar包拷贝到app下的libs中,同时右键"Add As Library..."。
也可以下载源码,以Library库形式添加。
线程安全: 考虑到Android 4.0之后不再允许主线程内进行网络请求,以及UI操作必须在主线程中进行。ks3-android-sdk所提供的API,默认让开发者在主线程进行调用,且会以异步方式进行请求,请求回调方法仍将执行在主线程。
如果开发者需要用同步方式进行API调用(即在自己开的线程内,调用同步API请求),需要调用以下方法,以确保API以同步方式进行。
ArrayList<Bucket> bucketList = client.syncListBuckets();// 同步API调用示例,需要在用户非主线程中执行,失败时会抛出异常
我们提供了完整的示例工程,您可以下载体验,也可以参考代码的编写。如果想要查看,可以点击 这里 ,需要注意的是导入项目时请选择ks3-android-sdk
目录,其中ks3androidsdk
为sdk源码部分,demo
为示例代码部分。
由于在App端明文存储AccessKeyID、AccessKeySecret是极不安全的,因此推荐的使用场景如下图所示:
如开发者需要在SDK请求完成后,向特定的URL发起一个回调请求,可以使用Callback回调功能,开发者必须在对应的request中传入callBackUrl以及callBackBody。 如需自定义参数,要以键值对形式将其传入。
注:setCallBack()方法仅在PutObejctRequest,CompleteMultipartUploadRequest两个类中提供)
方法名
public void setCallBack(String callBackUrl, String callBackBody, Map<String, String> customParams){};
参数说明
callBackUrl: 回调url地址
callBackBody: 回调参数,参数支持魔法变量、自定义参数以及常量形式,指明了回调方需要用到的参数:eg:String callBackBody = "objectKey=${key}&etag=${etag}&location=${kss-location}&name=${kss-name}";
customParams:自定义参数,必须以前缀**kss-**开头
**魔法变量说明:**是一组预先定义的变量,使用${key}形式作为CallBackBody的内容。
目前可用的魔法变量如下:
参数 | 说明 | 备注 |
---|---|---|
bucket | 文件上传的Bucket | Utf-8编码 |
key | 文件的名称 | Utf-8编码 |
etag | 文件Md5值经过base64处理 | |
objectSize | 文件大小 | 以字节标识 |
mimeType | 文件类型 | |
createTime | 文件创建时间 | Unix时间戳表示,1420629372,精确到秒 |
Callback使用范例:
Map<String,String> customParams = new HashMap<String, String>();
//自定义参数必须以kss-开头
params.put("kss-location", "user_input_location");
params.put("kss-name", "user_input_name");
request.setCallBack("http://127.0.0.1:19091/kss/call_back", "objectKey=${key}&etag=${etag}&location=${kss-location}&name=${kss-name}", customParams);
client.putObject(request, new PutObjectResponseHandler() {
@Override
public void onTaskProgress(double progress) {
}
@Override
public void onTaskSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onTaskStart() {
}
@Override
public void onTaskFinish() {
}
@Override
public void onTaskFailure(int statesCode, Header[] responceHeaders,
String response, Throwable paramThrowable) {
}
@Override
public void onTaskCancel() {
}
});
Ks3Client初始化包含以下两种:
方法: 在请求中加入名为 Authorization 的 Header,值为签名值。形如: Authorization: KSS P3UPCMORAFON76Q6RTNQ:vU9XqPLcXd3nWdlfLWIhruZrLAM=
签名生成规则
Authorization = “KSS YourAccessKeyID:Signature”
Signature = Base64(HMAC-SHA1(YourAccessKeyIDSecret, UTF-8-Encoding-Of( StringToSign ) ) );
StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" +
Content-Type + "\n" +
Date + "\n" +
CanonicalizedKssHeaders +
CanonicalizedResource;
关于签名的必要说明:
对于使用AuthListener以Token方式初始化SDK的用户,需要注意onCalculateAuth()回调方法中的参数,即为计算StringToSign的参数,服务器端应根据上述签名生成规则,利用AccessKeyID及AccessKeySecret计算出签名并正确返回给SDK。
onCalculateAuth()回调方法的参数Content-MD5, Content-Type, CanonicalizedKssHeaders参数可为空。若为空,则SDK会使用空字符串("")替代, 但Date和CanonicalizedResource不能为空。
为保证请求时间的一致性,需要App客户端及客户业务服务器保证各自的时间正确性,否则用错误的时间尝试请求,会返回403Forbidden错误。
onCalculateAuth()回调方法参数说明:
对应的初始化代码如下:
For AccessKeyID、AccessKeySecret
/* Directly using ak&sk */
client = new Ks3Client(Constants.ACCESS_KEY_ID,Constants.ACCESS_KEY_SECRET, DummyActivity.this);
configuration = Ks3ClientConfiguration.getDefaultConfiguration();
client.setConfiguration(configuration);
client.setEndpoint("ks3-cn-beijing.ksyun.com");
For AuthListener
/* Using authListener,Let your app server saved ak&sk and return token*/
client = new Ks3Client(new AuthListener() {
@Override
public String onCalculateAuth(String httpMethod,
String ContentType, String Date, String ContentMD5,
String Resource, String Headers) {
// 此处应由APP端向业务服务器发送post请求返回Token。
// 需要注意该回调方法运行在非主线程
//
String token = requsetToAppServer(httpMethod, ContentType,
Date, ContentMD5, Resource, Headers);
return token;
}
}, DummyActivity.this);
configuration = Ks3ClientConfiguration.getDefaultConfiguration();
client.setConfiguration(configuration);
client.setEndpoint("ks3-cn-beijing.ksyun.com");
注意事项:
ServerDateAuthListener
AuthListener
列出客户所有的 Bucket 信息
方法名:
public void listBuckets(ListBucketsResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.listBuckets(new ListBucketsResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeader,
ArrayList<Bucket> resultList) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeader, String responce,
Throwable throwable) {
}
}
);
列出客户所有的 Bucket 信息
方法名:
public void listBuckets(ListBucketsRequest request,ListBucketsResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.listBuckets(new ListBucketsRequest(),new ListBucketsResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeader,
ArrayList<Bucket> resultList) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeader, String responce,
Throwable throwable) {
}
}
);
创建一个新的Bucket
方法名:
public void createBucket(String bucketName,CreateBucketResponceHandler resultHandler) throw Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.createBucket(Constants.BucketName,
new CreateBucketResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
}
);
创建一个新的Bucket,并携带AccessControlList设置权限
方法名:
public void createBucket(String bucketName,AccessControlList list,CreateBucketResponceHandler resultHandler) throw Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
AccessControlList acl = new AccessControlList();
GranteeId grantee = new GranteeId() ;
grantee.setIdentifier("12773456");
grantee.setDisplayName("guoliTest222");
acl.addGrant(grantee, Permission.Read);
GranteeId grantee1 = new GranteeId() ;
grantee1.setIdentifier("123005789");
grantee1.setDisplayName("guoliTest2D2");
acl.addGrant(grantee1, Permission.Write);
client.createBucket(Constants.BucketName,acl,
new CreateBucketResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
}
);
创建一个新的Bucket,并携带CannedAccessControlList设置权限
方法名:
public void createBucket(String bucketName,CannedAccessControlList list,CreateBucketResponceHandler resultHandler) throw Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
CannedAccessControlList cannedAcl = CannedAccessControlList.PublicReadWrite;
client.createBucket(Constants.BucketName,cannedAcl,
new CreateBucketResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
}
);
创建一个新的Bucket
方法名:
public void createBucket(CreateBucketRequest request,CreateBucketResponceHandler resultHandler) throw Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.createBucket(new CreateBucketRequest(Constants.BucketName),
new CreateBucketResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
}
);
删除指定Bucket
方法名:
public void deleteBucket(String bucketname,DeleteBucketResponceHandler handler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.deleteBucket(Constants.BucketName,
new DeleteBucketResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
}
);
删除指定Bucket
方法名:
public void deleteBucket(DeleteBucketRequest request,DeleteBucketResponceHandler handler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.deleteBucket(new DeleteBucketRequest(Constants.BucketName),
new DeleteBucketResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
}
);
获取Bucket的ACL
方法名:
public void getBucketACL(String bucketName ,GetBucketACLResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.getBucketACL(Constants.BucketName, new GetBucketACLResponceHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
AccessControlPolicy accessControlPolicy) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable paramThrowable) {
}
}
);
获取Bucket的ACL
方法名:
public void getBucketACL(GetBucketACLRequest request ,GetBucketACLResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.getBucketACL(new GetBucketACLRequest(Constants.BucketName), new GetBucketACLResponceHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
AccessControlPolicy accessControlPolicy) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable paramThrowable) {
}
}
);
设置Bucket的ACL,以AccessControlList形式
方法名:
public void putBucketACL(String bucketName, AccessControlList accessControlList, PutBucketACLResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
AccessControlList acl = new AccessControlList();
GranteeId grantee = new GranteeId();
grantee.setIdentifier("12773456");
grantee.setDisplayName("guoliTest222");
acl.addGrant(grantee, Permission.Read);
client.putBucketACL(bucketName,acl, new PutBucketACLResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable paramThrowable) {
}
}
);
设置Bucket的ACL,以CannedAccessControlList形式
方法名:
public void putBucketACL(String bucketName,CannedAccessControlList CannedAcl,PutBucketACLResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
CannedAccessControlList cannedAcl = CannedAccessControlList.PublicReadWrite;
client.putBucketACL(bucketName, cannedAcl,new PutBucketACLResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable paramThrowable) {
}
}
);
设置Bucket的ACL
方法名:
public void putBucketACL(PutBucketACLRequest requset,PutBucketACLResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.putBucketACL(new PutBucketACLRequest(bucketName,cannedAcl), new PutBucketACLResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable paramThrowable) {
}
}
);
查询是否已经存在指定Bucket
方法名:
public void headBucket(String bucketname,HeadBucketResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.headBucket(Constants.BucketName,
new HeadBucketResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
}
);
查询是否已经存在指定Bucket
方法名:
public void headBucket(HeadBucketRequest request,HeadBucketResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.headBucket(new HeadBucketRequest(Constants.BucketName,
new HeadBucketResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
}
);
#put-bucket-crr
设置跨区域规则
方法名:
public void putBucketCrr(String bucketname,PutBucketReplicationResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.putBucketCrr(Constants.BucketName,
new PutBucketReplicationResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
}
);
获取Bucket跨区域规则
#get-bucket-crr
方法名:
public void getBucketCrr(GetBucketReplicationConfigRequest request,GetBucketReplicationConfigResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.getBucketCrr(new GetBucketReplicationConfigRequest(Constants.BucketName,
new GetBucketReplicationConfigResponceHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, ReplicationRule replicationRule) {
Log.e("tag", "getBucketCRR--onSuccess---" + "statesCode:" + statesCode);
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
}
);
设置Bucket桶配额
#put-bucket-quota
方法名:
public void putBucketQuota(PutBuckeQuotaRequest request,Ks3HttpResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
BucketQuota quota = new BucketQuota(1000000);
PutBuckeQuotaRequest quotaRequest = new PutBuckeQuotaRequest(Constants.BucketName, quota);
client.putBucketQuota(quotaRequest, new Ks3HttpResponceHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) {
System.out.println("onSuccess "+ new String(response));
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) {
Log.e("tag", "putBucketQuota--onFailure:" + stringBuffer.toString());
}
});
#get-bucket-quota
方法名:
public void getBucketQuota(GetBucketQuotaRequest request,GetBucketQuotaResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
GetBucketQuotaRequest quotaRequest = new GetBucketQuotaRequest(Constants.BucketName);
client.getBucketQuota(quotaRequest, new GetBucketQuotaResponceHandler() {
@Override
public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) {
Log.e("tag", "getBucketQuota--onFailure:" + stringBuffer.toString());
}
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, BucketQuota quota) {
System.out.println("onSuccess storageQuota is "+ quota.getStorageQuota());
}
});
#delete-bucket-quota
方法名:
public void deleteBucketQuota(DeleteBucketQuotaRequest request,Ks3HttpResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
DeleteBucketQuotaRequest quotaRequest = new DeleteBucketQuotaRequest(Constants.BucketName);
client.deleteBucketQuota(quotaRequest, new Ks3HttpResponceHandler() {
@Override
public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) {
Log.e("tag", "getBucketQuota--onFailure:" + stringBuffer.toString());
}
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, BucketQuota quota) {
System.out.println("onSuccess storageQuota is "+ quota.getStorageQuota());
}
});
设置Bucket空间策略
#put-bucket-policy
方法名:
public void putBucketPolicy(PutBuckePolicyRequest request,Ks3HttpResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
resultHandler:回调接口,包含onSuccess以及onFailure两个回调方法,运行在主线程
request:PutBuckePolicyRequest
policyRule:BucketPolicyRule 回调参数:
statesCode:Http请求返回的状态码,200表示请求成功,400表示客户端请求错误,403表示签名错误或本地日期时间错误,404表示请求一个不存在的Bucket
responceHeader:Http请求响应报头
response:响应体
paramThrowable:出错时抛出的异常,Bucket名字不符合需求,抛出IllegalArgumentException
代码示例:
BucketPolicyRule policyRule = new BucketPolicyRule()
.addAllAction()
.addPrincipalByAccountId("AccountId")
.addPrincipalByAccountIdAndUserName("123123", "123123")
.addBucketResource(Constants.BucketName)
.addConditionSouceIp("11.11.11.11", true)
.addSourceHeader("Connection: keep-alivE", BucketPolicyConditionRule.StringLike)
.addSourceHeader("Connection: keep-alivE123", BucketPolicyConditionRule.StringEquals)
.setEffect("Allow");
PutBuckePolicyRequest putBuckePolicyRequest = new PutBuckePolicyRequest(Constants.BucketName), policyRule);
client.putBucketPolicy(putBuckePolicyRequest, new Ks3HttpResponceHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) {
}
});
#get-bucket-policy
方法名:
public void getBucketPolicy(GetBucketPolicyRequest request,GetBucketPolicyResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
GetBucketPolicyRequest request = new GetBucketPolicyRequest(Constants.BucketName);
client.getBucketPolicy(request, new GetBucketPolicyResponceHandler() {
@Override
public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) {
Log.e("tag", "getBucketQuota--onFailure:" + stringBuffer.toString());
}
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, String policy) {
System.out.println("success ! policy is : " + policy);
}
});
#delete-bucket-policy
方法名:
public void deleteBucketPolicy(DeleteBucketPolicyRequest request,Ks3HttpResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
DeleteBucketPolicyRequest request = new DeleteBucketPolicyRequest(Constants.BucketName);
client.deleteBucketPolicy(request, new Ks3HttpResponceHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, byte[] response) {
System.out.println("onSuccess statesCode is " + statesCode);
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders, byte[] response, Throwable throwable) {
System.out.println("onFailure statesCode is " + statesCode);
}
});
下载该Object数据 方法名:
public Ks3HttpRequest getObject(Context context, String bucketname, String key, GetObjectResponceHandler getObjectResponceHandler(File file,String bucketname,String objectKey))throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.getObject(DummyActivity.this,Constants.BucketName,Constants.ObjectKey,
new GetObjectResponceHandler(new File(Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
Constants.ObjectKey), Constants.BucketName,
Constants.ObjectKey) {
@Override
public void onTaskSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onTaskFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
@Override
public void onTaskFinish(){
}
@Override
public void onTaskStart(){
}
@Override
public void onTaskProgress(double progress){
//运行在非UI线程,更新UI时需要注意
//Progress为0-100之间的double类型数值
}
}
);
下载该Object数据
方法名:
public Ks3HttpRequest getObject(GetObjectRequest request, GetObjectResponceHandler getObjectResponceHandler(File file,String bucketname,String objectKey))throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.getObject(new GetObjectRequest(bucketname, key),
new GetObjectResponceHandler(new File(Environment
.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
Constants.ObjectKey), Constants.BucketName,
Constants.ObjectKey) {
@Override
public void onTaskSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onTaskFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
@Override
public void onTaskFinish(){
}
@Override
public void onTaskStart(){
}
@Override
public void onTaskProgress(double progress){
//运行在非UI线程,更新UI时需要注意
//Progress为0-100之间的double类型数值
}
}
);
查询是否已经存在指定Object
方法名:
public void headObject(String bucketname, String objectkey,HeadObjectResponseHandler resultHandler)throws Ks3ClientException, Ks3ServiceException;
参数说明:
回调参数:
代码示例:
client.headObject(Constants.BucketName,Constants.ObjectKey,
new HeadObjectResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
HeadObjectResult headObjectResult) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
}
);
查询是否已经存在指定Object
方法名:
public void headObject(HeadObjectRequest request,HeadObjectResponseHandler resultHandler)throws Ks3ClientException, Ks3ServiceException;
参数说明:
回调参数:
代码示例:
client.headObject(new HeadObjectRequest(Constants.BucketName,Constants.ObjectKey)
new HeadObjectResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
HeadObjectResult headObjectResult) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
}
);
删除指定Object
方法名:
public void deleteObject(String bucketname, String objectKey , DeleteObjectRequestHandler handler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.deleteObject(Constants.BucketName,Constants.ObjectKey, new DeleteObjectRequestHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
删除指定Object
方法名:
public void deleteObject(DeleteObjectRequest request, DeleteObjectRequestHandler handler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.deleteObject(new DeleteObjectRequest(Constants.BucketName,Constants.ObjectKey),new DeleteObjectRequestHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
获得Object的acl
方法名:
public void getObjectACL(String bucketName, String ObjectName , GetObjectACLResponseHandler resultHandler)throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.getObjectACL(Constants.BucketName,Constants.ObjectKey,
new GetObjectACLResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
AccessControlPolicy accessControlPolicy) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
}
);
获得Object的acl
方法名:
public void getObjectACL(GetObjectACLRequest request, GetObjectACLResponseHandler resultHandler)throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.getObjectACL(new GetObjectACLRequest(Constants.BucketName,Constants.ObjectKey),
new GetObjectACLResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
AccessControlPolicy accessControlPolicy) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
}
);
上传object的acl,以CannedAccessControlList形式
方法名:
public void putObjectACL(String bucketName, String objectKey,CannedAccessControlList list, PutObjectACLResponseHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
CannedAccessControlList list = CannedAccessControlList.PublicRead;
client.putObjectACL(bucketName, objectKey, list, new PutObjectACLResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
上传object的acl,以AccessControlList形式
方法名:
public void putObjectACL(String bucketName, String objectName,AccessControlList list,PutObjectACLResponseHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
AccessControlList acList = new AccessControlList();
GranteeId grantee = new GranteeId();
grantee.setIdentifier("123456");
grantee.setDisplayName("TESTTEST1");
acList.addGrant(grantee, Permission.Read);
client.putObjectACL(bucketName, objectKey, list, new PutObjectACLResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
上传object的acl
方法名:
public void putObjectACL(PutObjectACLRequest request, PutObjectACLResponseHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
CannedAccessControlList list = CannedAccessControlList.PublicRead;
client.putObjectACL(new PutObjectACLRequest(bucketName, objectKey, list), new PutObjectACLResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
列举Bucket内的Object
方法名:
public void listObjects(String bucketname,ListObjectsResponseHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.listObjects(Constants.BucketName, new ListObjectsResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
ObjectListing objectListing) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
列举Bucket内的Object
方法名:
public void listObjects(String bucketname,String prefix,ListObjectsResponseHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.listObjects(Constants.BucketName,Constants.Prefix, new ListObjectsResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
ObjectListing objectListing) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
列举Bucket内的Object
方法名:
public void listObjects(String bucketName, String prefix, String marker, String delimiter, Integer maxKeys, ListObjectsResponseHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.listObjects(new ListObjectsRequest(bucketname,prefix,delimiter,maxKeys), new ListObjectsResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
ObjectListing objectListing) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
列举Bucket内的Object
方法名:
public void listObjects(ListObjectsRequest request,ListObjectsResponseHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.listObjects(new ListObjectsRequest(bucketname, prefix), new ListObjectsResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
ObjectListing objectListing) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
}
);
上传Object数据
方法名:
public Ks3HttpRequest PutObject(String bucketname, String objectkey, File file , PutObjectResponseHandler handler) throws Ks3ClientException, Ks3ServiceException;
参数说明:
回调参数:
代码示例:
client.PutObject(bucketname, objectkey, file, new PutObjectResponseHandler() {
@Override
public void onTaskSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onTaskFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
@Override
public void onTaskFinish(){
}
@Override
public void onTaskStart(){
}
@Override
public void onTaskProgress(double progress){
//运行在非UI线程,更新UI时需要注意
//Progress为0-100之间的double类型数值
}
}
);
上传Object数据
方法名:
public Ks3HttpRequest PutObject(PutObjectRequest request, PutObjectResponseHandler handler) throws Ks3ClientException, Ks3ServiceException;
参数说明:
回调参数:
代码示例:
client.PutObject(new PutObjectRequest(bucketname, objectkey, file), new PutObjectResponseHandler() {
@Override
public void onTaskSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onTaskFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
@Override
public void onTaskFinish(){
}
@Override
public void onTaskStart(){
}
@Override
public void onTaskProgress(double progress){
//运行在非UI线程,更新UI时需要注意
//Progress为0-100之间的double类型数值
}
}
);
复制Object
方法名:
public void copyObject(String destinationBucket, String destinationObject,String sourceBucket, String sourceKey, CopyObjectResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException {}
参数说明:
回调参数:
代码示例:
client.copyObject("ks3-sdk-test", "object-source", "eflake", "object-copy", new CopyObjectResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
CopyResult result) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
});
复制Object
方法名:
public void copyObject(String destinationBucket, String destinationObject,String sourceBucket, String sourceKey, CannedAccessControlList cannedAcl, CopyObjectResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException {}
参数说明:
回调参数:
代码示例:
CannedAccessControlList cannedAcl = CannedAccessControlList.PublicRead;
client.copyObject("ks3-sdk-test", "object-source", "eflake", "object-copy",cannedAcl, new CopyObjectResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
CopyResult result) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
});
复制Object
方法名:
public void copyObject(String destinationBucket, String destinationObject,String sourceBucket, String sourceKey, AccessControlList accessControlList, CopyObjectResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException {}
参数说明:
回调参数:
代码示例:
AccessControlList acList = new AccessControlList();
GranteeId grantee = new GranteeId();
grantee.setIdentifier("123456");
grantee.setDisplayName("TESTTEST1");
acList.addGrant(grantee, Permission.Read);
client.copyObject("ks3-sdk-test", "object-source", "eflake", "object-copy",acList, new CopyObjectResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
CopyResult result) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
});
复制Object
方法名:
public void copyObject(CopyObjectRequest request,CopyObjectResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException {}
参数说明:
回调参数:
代码示例:
CopyObjectRequest request = new CopyObjectRequest(destinationBucket,
destinationObject, sourceBucket, sourceKey);
client.copyObject(request, new CopyObjectResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders,
CopyResult result) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable throwable) {
}
});
调用这个接口会初始化一个分块上传,KS3 Server会返回一个upload id, upload id 用来标识属于当前object的具体的块,并且用来标识完成分块上传或者取消分块上传
方法名:
public void initiateMultipartUpload(String bucketname, String objectkey, InitiateMultipartUploadResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException;
参数说明:
回调参数:
代码示例:
client.initiateMultipartUpload(bucketName, objectKey,
new InitiateMultipartUploadResponceHandler() {
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
InitiateMultipartUploadResult result) {
String uploadId = result.getUploadId();
});
调用这个接口会初始化一个分块上传,KS3 Server会返回一个upload id, upload id 用来标识属于当前object的具体的块,并且用来标识完成分块上传或者取消分块上传
方法名:
public void initiateMultipartUpload(InitiateMultipartUploadRequest request, InitiateMultipartUploadResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException;
参数说明:
回调参数:
代码示例:
client.initiateMultipartUpload(new InitiateMultipartUploadRequest(
bucketName, objectKey),
new InitiateMultipartUploadResponceHandler() {
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
InitiateMultipartUploadResult result) {
String uploadId = result.getUploadId();
});
初始化分块上传后,上传分块接口。Part number 是标识每个分块的数字,介于0-10000之间。除了最后一块,每个块必须大于等于5MB,最后一块没有这个限制。
方法名:
public void uploadPart(String bucketName, String key, String uploadId,File file, long offset, int partNumber, long partSize,UploadPartResponceHandler resultHandler)throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.uploadPart(bucketName, key,
uploadId, file, offset, partNumbe,partsize,new UploadPartResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
PartETag result) {
Log.d("eflake","upload part success , partnumber = "+ result.getPartNumber()+ ",etag = "+ result.getETag());
}
@Override
public void onFailure(int statesCode,Header[] responceHeaders,
String response, Throwable throwable) {
Log.d("eflake","upload part failed ,responce = "
+ response);
}
}
);
初始化分块上传后,上传分块接口。Part number 是标识每个分块的数字,介于0-10000之间。除了最后一块,每个块必须大于等于5MB,最后一块没有大小限制。
方法名:
public void uploadPart(UploadPartRequest request,UploadPartResponceHandler resultHandler)throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.uploadPart(new UploadPartRequest(bucketName, key,
uploadId, file, offset, partNumber++, partsize),new UploadPartResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
UploadPartResult result) {
Log.d("eflake","upload part success , partnumber = "+ result.getPartNumber()+ ",etag = "+ result.getETag());
}
@Override
public void onFailure(int statesCode,Header[] responceHeaders,
String response, Throwable throwable) {
Log.d("eflake","upload part failed ,responce = "
+ response);
}
}
);
罗列出已经上传的块
方法名:
public void ListParts(String bucketname, String objectkey, String uploadId,ListPartsResponseHandler handler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.ListParts(bucketName, objectKey, uploadId,
new ListPartsResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
ListPartsResult listPartsResult) {
Log.d("eflake", "listPart success :"
+ listPartsResult.toString());
mLastListPartResul = listPartsResult;
int mLastSize = listPartsResult.getParts()
.size();
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
Log.d("eflake",
"listPart fail ,reason :"
+ response);
}
});
罗列出已经上传的块
方法名:
public void ListParts(String bucketname, String objectkey, String uploadId, int maxParts, ListPartsResponseHandler handler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.ListParts(bucketName, objectKey,uploadId,maxParts,
new ListPartsResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
ListPartsResult listPartsResult) {
Log.d("eflake", "listPart success :"
+ listPartsResult.toString());
mLastListPartResul = listPartsResult;
int mLastSize = listPartsResult.getParts()
.size();
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
Log.d("eflake",
"listPart fail ,reason :"
+ response);
}
});
罗列出已经上传的块
方法名:
public void ListParts(String bucketname, String objectkey, String uploadId,int maxParts, int partNumberMarker, ListPartsResponseHandler handler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.ListParts(bucketName, objectKey,uploadId,maxParts,partNumberMarker,
new ListPartsResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
ListPartsResult listPartsResult) {
Log.d("eflake", "listPart success :"
+ listPartsResult.toString());
mLastListPartResul = listPartsResult;
int mLastSize = listPartsResult.getParts()
.size();
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
Log.d("eflake",
"listPart fail ,reason :"
+ response);
}
});
取消分块上传。
方法名:
public void abortMultipartUpload(String bucketname, String objectkey, String uploadId,AbortMultipartUploadResponseHandler handler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.abortMultipartUpload(bucketname, objectkey, uploadId, new AbortMultipartUploadResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable paramThrowable) {
}
});
取消分块上传。
方法名:
public void abortMultipartUpload(AbortMultipartUploadRequest request, AbortMultipartUploadResponseHandler handler) throws Ks3ClientException, Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.abortMultipartUpload(new AbortMultipartUploadRequest(bucketname, objectkey, uploadId), new AbortMultipartUploadResponseHandler() {
@Override
public void onSuccess(int statesCode, Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode, Header[] responceHeaders,
String response, Throwable paramThrowable) {
}
});
组装之前上传的块,然后完成分块上传。通过你提供的xml文件,进行分块组装。在xml文件中,块号必须使用升序排列。必须提供每个块的ETag值。
方法名:
public void completeMultipartUpload(String bucketname, String objectkey, String uploadId, List partETags,CompleteMultipartUploadResponseHandler handler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.completeMultipartUpload(
new CompleteMultipartUploadRequest(
mLastListPartResul),
new CompleteMultipartUploadResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
CompleteMultipartUploadResult result) {
Log.d("eflake",
"completeMultipartUpload success, result = "
+ result.getBucket());
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders,
String response,
Throwable paramThrowable) {
Log.d("eflake",
"completeMultipartUpload failed, reason = "
+ response);
}
});
组装之前上传的块,然后完成分块上传。通过你提供的xml文件,进行分块组装。在xml文件中,块号必须使用升序排列。必须提供每个块的ETag值。
方法名:
public void completeMultipartUpload(ListPartsResult result, CompleteMultipartUploadResponseHandler handler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.completeMultipartUpload(mLastListPartResul,
new CompleteMultipartUploadResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
CompleteMultipartUploadResult result) {
Log.d("eflake",
"completeMultipartUpload success, result = "
+ result.getBucket());
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders,
String response,
Throwable paramThrowable) {
Log.d("eflake",
"completeMultipartUpload failed, reason = "
+ response);
}
});
组装之前上传的块,然后完成分块上传。通过你提供的xml文件,进行分块组装。在xml文件中,块号必须使用升序排列。必须提供每个块的ETag值。
方法名:
public void completeMultipartUpload(CompleteMultipartUploadRequest request, CompleteMultipartUploadResponseHandler handler) throws Ks3ClientException,Ks3ServiceException{}
参数说明:
回调参数:
代码示例:
client.completeMultipartUpload(
new CompleteMultipartUploadRequest(
mLastListPartResul),
new CompleteMultipartUploadResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
CompleteMultipartUploadResult result) {
Log.d("eflake",
"completeMultipartUpload success, result = "
+ result.getBucket());
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders,
String response,
Throwable paramThrowable) {
Log.d("eflake",
"completeMultipartUpload failed, reason = "
+ response);
}
});
分片上传代码示例
handler = new UploadPartHandler();
client.initiateMultipartUpload(new InitiateMultipartUploadRequest(
bucketName, objectKey),
new InitiateMultipartUploadResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
InitiateMultipartUploadResult result) {
String uploadId = result.getUploadId();
handler.sendEmptyMessage(TransferManager.STATE_UPLOAD_NEXT);
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
}
}
);
public class UploadPartHandler extends Handler {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case TransferManager.STATE_UPLOAD_NEXT:
if (localUploadPartRequestFactory.hasMoreRequests()) {
UploadPartRequest uploadPartRequest = localUploadPartRequestFactory
.getNextUploadPartRequest();
client.uploadPart(uploadPartRequest,
new UploadPartResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
UploadPartResult result) {
Log.d("eflake",
"upload part success , partnumber = "
+ result.getPartNumber()
+ ",etag = "
+ result.getETag());
handler.sendEmptyMessage(TransferManager.STATE_UPLOAD_NEXT);
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders,
String response, Throwable throwable) {
Log.d("eflake",
"upload part failed ,responce = "
+ response);
handler.sendEmptyMessage(TransferManager.STATE_UPLOAD_FAILED);
}
});
} else {
handler.sendEmptyMessage(TransferManager.STATE_UPLOAD_FINISH);
}
break;
case TransferManager.STATE_UPLOAD_FINISH:
client.ListParts(bucketName, objectKey,
transferResponceHandler.getMultipartUoloadId(),
new ListPartsResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
ListPartsResult listPartsResult) {
mLastListPartResul = listPartsResult;
handler.sendEmptyMessage(TransferManager.STATE_UPLOAD_COMPLETE);
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable paramThrowable) {
Log.d("eflake",
"listPart failed, reason :"
+ response);
}
});
break;
case TransferManager.STATE_UPLOAD_FAILED:
break;
case TransferManager.STATE_UPLOAD_COMPLETE:
if (mLastListPartResul != null) {
client.completeMultipartUpload(
new CompleteMultipartUploadRequest(
mLastListPartResul),
new CompleteMultipartUploadResponseHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders,
CompleteMultipartUploadResult result) {
Log.d("eflake",
"completeMultipartUpload success, result = "
+ result.getBucket());
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders,
String response,
Throwable paramThrowable) {
Log.d("eflake",
"completeMultipartUpload failed, reason = "
+ response);
}
});
}
break;
default:
break;
}
}
}
#音视频使用示例
/**
* 音视频处理
*/
public void testPutAndQueryAdp() {
String srcObjectKey = "test/file1.mp4";
String newObjectKey = "new/Upload3.mp4";
//音视频处理
Adp avop = new Adp();
avop.setBucket(DST_BUCKETNAME);
avop.setCommand("tag=avop&f=mp4&res=1080x720&vbr=1000k&abr=64k");
avop.setKey(newObjectKey);
//视频截图
Adp avscrnshot = new Adp();
avscrnshot.setBucket(DST_BUCKETNAME);
avscrnshot.setCommand("tag=avscrnshot&ss=10&res=640x360&rotate=90");
avscrnshot.setKey(newObjectKey);
//视频采样截图
Adp avsample = new Adp();
avsample.setBucket(DST_BUCKETNAME);
avsample.setCommand("tag=avsample&ss=5&t=30&res=640x360&rotate=90&interval=5&pattern=5oiq5Zu+LSUzZC5qcGc=");
avsample.setKey(newObjectKey);
//音视频切片
Adp avm3u8 = new Adp();
avm3u8.setBucket(DST_BUCKETNAME);
avm3u8.setCommand("tag=avm3u8&segtime=10&abr=128k&vbr=1000k&res=1280x720");
avm3u8.setKey(newObjectKey);
//视频拼接
Adp avconcat = new Adp();
avconcat.setBucket(DST_BUCKETNAME);
avconcat.setCommand("tag=avconcat&f=mp4&mode=1&file=" + com.ksyun.ks3.util.Base64.encode("test/file2.mp4".getBytes()));
avconcat.setKey(newObjectKey);
PutAdpRequest adpRequest = new PutAdpRequest(SRC_BUCKETNAME, srcObjectKey, Arrays.asList(avconcat));
adpRequest.setNotifyURL("http://127.0.0.1:9000/notify/url");
//音视频元数据获取
GetAdpRequest getAdpRequest = new GetAdpRequest("taskId");
client.getAdpTask(getAdpRequest, new GetObjectAdpResponceHandler() {
@Override
public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) { }
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, AdpTask adpTask) {
System.out.println("getAdpTask is " + adpTask.toString());
}
});
//发送请求
client.putAdpTask(adpRequest, new PutObjectAdpResponceHandler() {
@Override
public void onFailure(int statesCode, Ks3Error error, Header[] responceHeaders, String response, Throwable paramThrowable) {
}
@Override
public void onSuccess(int statesCode, Header[] responceHeaders, PutAdpResult adpResult) {
System.out.println("taskId is " + adpResult.getTaskId());
}
});
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型