Этот документ в основном описывает установку и использование 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...».
Также можно скачать исходный код и добавить его в качестве библиотеки.
Потоки и безопасность: учитывая, что Android 4.0 и выше больше не разрешает выполнять сетевые запросы и операции с пользовательским интерфейсом в главном потоке, а также учитывая, что все операции с UI должны выполняться в главном потоке. API, предоставляемые ks3-android-sdk, по умолчанию позволяют разработчикам вызывать их в главном потоке и будут выполнять запросы асинхронно, при этом обратные вызовы методов будут выполняться в основном потоке.
Если разработчику необходимо использовать синхронный способ вызова API (то есть в собственном потоке, вызвать синхронный API-запрос), необходимо вызвать следующий метод, чтобы гарантировать, что API будет выполнен синхронно.
ArrayList<Bucket> bucketList = client.syncListBuckets();// синхронный вызов API, должен выполняться в неглавном потоке, в случае неудачи будет выброшено исключение
Мы предоставляем полный пример проекта, который вы можете загрузить и изучить или использовать в качестве примера кода. Чтобы просмотреть проект, перейдите по ссылке. Обратите внимание, что при импорте проекта необходимо выбрать каталог ks3-android-sdk. Каталог ks3androidsdk содержит исходный код SDK, а каталог demo — пример кода.
Поскольку хранение AccessKeyID и AccessKeySecret в открытом виде на стороне приложения является крайне небезопасным, рекомендуется использовать следующие сценарии:
Например, если разработчику требуется выполнить обратный вызов на определённый URL после завершения запроса SDK, можно использовать функцию обратного вызова Callback. Разработчику необходимо передать callBackUrl и callBackBody в соответствующем запросе. Если требуются пользовательские параметры, они должны быть переданы в формате ключ-значение.
Примечание: метод setCallBack() доступен только в классах PutObejctRequest и CompleteMultipartUploadRequest.
Имя метода:
public void setCallBack(String callBackUrl, String callBackBody, Map<String, String> customParams){};
Описание параметров:
callBackUrl: URL обратного вызова.
callBackBody: параметры обратного вызова, которые поддерживают магические переменные, пользовательские параметры и константы, указывающие на параметры, необходимые для обратного вызова: например, String callBackBody = "objectKey=${key}&etag=${etag}&location=${kss-location}&name=${kss-name}";
customParams: пользовательские параметры, должны начинаться с префикса kss-
Магические переменные: это набор предварительно определённых переменных, использующих форму ${key} в качестве содержимого CallBackBody.
Доступные магические переменные:
Параметр | Описание | Примечание |
---|---|---|
bucket | Имя файла | В кодировке UTF-8 |
key | Название файла | В кодировке UTF-8 |
etag | Значение MD5 файла, закодированное в base64 | |
objectSize | Размер файла в байтах | |
mimeType | Тип файла | |
createTime | Время создания файла в Unix-формате, выраженное в секундах | Пример: 1420629372 |
Пример использования обратного вызова:
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=
*签名生成规则*
```java
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()回调方法参数说明:
* Content-MD5 表示请求内容数据的MD5值, 使用Base64编码
* Content-Type 表示请求内容的类型
* Date 表示此次操作的时间,且必须为 HTTP1.1 中支持的 GMT 格式,客户端应**务必**保证本地时间正确性
* CanonicalizedKssHeaders 表示HTTP请求中的以x-kss开头的Header组合
* CanonicalizedResource 表示用户访问的资源
对应的初始化代码如下:
***For AccessKeyID、AccessKeySecret***
```java
/* 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***
```java
/* 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");
```
*注意事项:*
- 如果date参与签名的计算时需要使用`ServerDateAuthListener`
- 如果date不参与签名计算时使用`AuthListener`
---
## SDK介绍及使用
### 核心类介绍
- Ks3Client 封装接入Web Service的一系列操作,提供更加便利的接口以及回调
- Ks3ClientConfiguration 配置Ks3Client参数,包括代理设置,请求超时时长以及重试次数等
- AuthUtils 包含授权算法的工具类
### 资源管理操作
* [List Buckets](#list-buckets) 列出客户所有的Bucket信息
* [Create Bucket](#create-bucket) 创建一个新的Bucket
* [Delete Bucket](#delete-bucket) 删除指定Bucket
* [Get Bucket ACL](#get-bucket-acl) 获取Bucket的ACL
* [Put Bucket ACL](#put-bucket-acl) 设置Bucket的ACL
* [Head Bucket](#head-bucket) 查询是否已经存在指定Bucket
* [Put Bucket CRR](#put-bucket-crr)设置跨区域复制规则
* [Get Bucket CRR](#get-bucket-crr)获取跨区域复制规则
* [Get Bucket QUOTA](#get-bucket-quota)设置桶配额
* [Get Bucket QUOTA](#get-bucket-quota)获取桶配额
* [Delete Bucket QUOTA](#get-bucket-quota)删除桶配额
* [Get Bucket POLICY](#get-bucket-policy)设置空间策略
* [Get Bucket POLICY](#get-bucket-policy)获取空间策略
* [Delete Bucket POLICY](#get-bucket-policy)删除空间策略
* [Get Object](#get-object) 下载Object数据
* [Head Object](#head-object) 查询是否已经存在指定Object
* [Delete Object](#delete-object) 删除指定Object
* [Get Object ACL](#get-object-acl) 获得Bucket的acl
* [Put Object ACL](#put-object-acl) 上传object的acl
* [List Objects](#list-objects) 列举Bucket内的Object
* [Put Object](#put-object) 上传Object数据
* [Copy Object](#copy-object)复制Object数据
* [Initiate Multipart Upload](#initiate-multipart-upload) 调用这个接口会初始化一个分块上传
* [Upload Part](#upload-part) 上传分块
* [List Parts](#list-parts) 罗列出已经上传的块
* [Abort Multipart Upload](#abort-multipart-upload) 取消分块上传
* [Complete Multipart Upload](#complete-multipart-upload) 组装所有分块上传的文件
* [Multipart Upload Example Code](#multipart-upload-example-code) 分片上传代码示例
* [音视频使用示例](#音视频使用示例) 代码示例
### Service操作
#### List Buckets:
В запросе идёт речь о том, как добавить заголовок Authorization в запрос. Значение заголовка должно быть подписью, которая формируется по определённому правилу.
Для формирования подписи используется метод HMAC-SHA1. В качестве входных данных для этого метода используются значения параметров HTTP-запроса, которые перечислены в запросе.
Также в запросе есть информация о том, что если дата не участвует в формировании подписи, то используется AuthListener. Если же дата участвует в формировании подписи, то необходимо использовать ServerDateAuthListener. **Список всех Bucket клиента**
**Метод:** public void listBuckets(ListBucketsResponceHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
* **Параметры:**
* resultHandler — интерфейс обратного вызова с методами onSuccess и onFailure. Работает в основном потоке.
**Обратные параметры:**
* statesCode — код состояния HTTP-запроса. 200 означает успешное выполнение запроса, 403 — ошибку подписи или локальную ошибку даты и времени.
* responceHeader — заголовки ответа HTTP-запроса.
* responce — текст ответа при ошибке.
* throwable — исключение при ошибке.
* resultList — список Bucket при успешном выполнении.
Пример кода:
```java
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 {}
Обратные параметры:
* statesCode — код состояния HTTP-запроса. 200 означает успешное выполнение запроса, 403 — ошибку подписи или локальную ошибку даты и времени.
* responceHeader — заголовки ответа HTTP-запроса.
* responce — текст ответа при ошибке.
* throwable — исключение при ошибке.
* resultList — список Bucket при успешном выполнении.
Пример кода:
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{}
Обратные параметры:
* statesCode — код состояния HTTP-запроса. 200 означает успешное выполнение запроса, 400 — превышение лимита на количество Bucket или ошибку формата клиентского запроса, 403 — ошибку подписи или локальную ошибку даты и времени, 409 — существование Bucket.
* responceHeader — заголовки ответа HTTP-запроса.
* responce — текст ответа при ошибке.
* throwable — исключение при ошибке, например, если имя Bucket не соответствует требованиям, выбрасывается IllegalArgumentException.
Пример кода:
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{}
Обратные параметры:
* statesCode — код состояния HTTP-запроса. 200 означает успешное выполнение запроса, 400 — ошибку клиентского запроса, 403 — ошибку подписи или локальную ошибку даты и времени, 409 — существование Bucket.
* responceHeader — заголовки ответа HTTP-запроса.
* responce — текст ответа при ошибке.
* throwable — исключение при ошибке, например, если имя Bucket или список не соответствуют требованиям, выбрасывается IllegalArgumentException. **Создание нового Bucket с CannedAccessControlList для установки прав доступа**
onSuccess(int statesCode, Header[] responceHeaders) { }
@Override public void onFailure(int statesCode, Header[] responceHeaders, String response, Throwable throwable) { } });
Создание нового Bucket
public void createBucket(String bucketName, CannedAccessControlList list, CreateBucketResponceHandler resultHandler) throw Ks3ClientException, Ks3ServiceException { }
Параметры:
resultHandler: Обработчик обратного вызова, содержащий методы onSuccess и onFailure, которые выполняются в основном потоке.
bucketName: Указанное имя Bucket.
list: Переданный CannedAccessControlList.
Обратные параметры:
Пример кода:
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
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
deleteBucket(DeleteBucketRequest request, DeleteBucketResponceHandler handler) throws Ks3ClientException,Ks3ServiceException{ }
Параметры:
Обратные параметры:
new DeleteBucketResponceHandler() {
@Override
public void onSuccess(int statesCode,
Header[] responceHeaders) {
}
@Override
public void onFailure(int statesCode,
Header[] responceHeaders, String response,
Throwable throwable) {
}
};
Получение ACL корзины
Метод:
public void getBucketACL(String bucketName, GetBucketACLResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
Параметры:
resultHandler — обработчик обратного вызова, содержащий методы onSuccess и onFailure, которые выполняются в основном потоке.
bucketName — имя указанной корзины.
Обратные параметры:
statesCode — код состояния HTTP-запроса, 200 означает успешное выполнение запроса, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени, 404 — получение ACL несуществующей корзины.
responceHeader — заголовки ответа HTTP-запроса.
responce — ответное сообщение при ошибке.
Throwable — исключение при возникновении ошибки, например, если имя корзины не соответствует требованиям, выбрасывается исключение IllegalArgumentException.
accessControlPolicy — модель ACL политики доступа, включая информацию о владельце и контейнер ACL.
Пример кода:
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) {
}
});
Метод:
public void getBucketACL(GetBucketACLRequest request, GetBucketACLResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException{}
Параметры:
resultHandler — обработчик обратного вызова, который содержит методы onSuccess и onFailure и выполняется в основном потоке.
request — объект GetBucketACLRequest.
Обратные параметры:
statesCode — код состояния HTTP-запроса, 200 означает успешное выполнение запроса, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени, 404 — получение ACL несуществующей корзины.
responceHeader — заголовки ответа HTTP-запроса.
responce — ответное сообщение при ошибке.
Throwable — исключение при возникновении ошибки, например, если имя корзины не соответствует требованиям, выбрасывается исключение IllegalArgumentException.
accessControlPolicy — модель ACL политики доступа, включая информацию о владельце и контейнер ACL.
Пример кода:
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) {
}
});
Установка ACL корзины в виде AccessControlList.
Метод:
public void putBucketACL(String bucketName, AccessControlList accessControlList, PutBucketACLResponseHandler resultHandler) throws Ks3ClientException,Ks3ServiceException{}
Параметры:
resultHandler — обработчик обратного вызова, включающий методы onSuccess и onFailure, выполняемые в основном потоке.
запрос — класс запроса для загрузки, необходимо добавить контейнер ACL для загрузки.
accessControlList — переданный объект AccessControlList.
Обратные параметры:
statesCode — код состояния HTTP-запроса, 200 означает успешное выполнение запроса, но исходный ACL будет очищен и сохранён только текущий, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени, 404 — установка ACL для несуществующей корзины.
responceHeader — заголовки ответа HTTP-запроса.
responce — сообщение об ошибке при неудачном выполнении.
Throwable — исключение, возникающее при ошибке, например, при попытке установить пустой ACL для существующей корзины, проверка параметров вызовет исключение, которое также вызовет исключение IllegalArgumentException.
Пример кода:
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) {
}
});
Установка ACL корзины в виде CannedAccessControlList. Параметры:
Параметры обратного вызова:
Пример кода:
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) {
}
});
Установка ACL для Bucket
Метод: 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) {
}
});
``` **putBucketCrr**
*Параметры:*
— resultHandler: интерфейс обратного вызова, содержащий методы onSuccess и onFailure, выполняется в основном потоке.
— bucketname: имя указанного сегмента.
**Параметры обратного вызова:**
— statesCode: код состояния HTTP-запроса, 200 — запрос выполнен успешно, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени, 404 — запрос несуществующего сегмента.
— responceHeader: заголовок ответа HTTP-запроса.
— responce: текст ответа при ошибке.
— Throwable: исключение при возникновении ошибки, например, если имя сегмента не соответствует требованиям, выбрасывается IllegalArgumentException.
**Пример кода:**
```java
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) {
}
}
);
getBucketCrr
Метод: public void getBucketCrr (GetBucketReplicationConfigRequest request, GetBucketReplicationConfigResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException.
Параметры: — resultHandler: интерфейс обратного вызова, содержит методы onSuccess и onFailure, работает в основном потоке. — request: объект GetBucketReplicationConfigRequest.
Параметры обратного вызова: — statesCode: код состояния HTTP-запроса, 200 — запрос выполнен успешно, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени, 404 — запрос несуществующего сегмента. — responceHeader: заголовок HTTP-ответа. — replicationRule: правило межрегиональной репликации. — paramThrowable: исключение при возникновении ошибки, например, если имя сегмента не соответствует требованиям, выбрасывается IllegalArgumentException.
Пример кода:
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) {
}
}
);
putBucketQuota
Метод: public void putBucketQuota (PutBuckeQuotaRequest request, Ks3HttpResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException.
Параметры: — resultHandler: интерфейс обратного вызова, содержит методы onSuccess и onFailure, работает в основном потоке. — request: объект PutBuckeQuotaRequest.
Параметры обратного вызова: — statesCode: код состояния HTTP-запроса, 200 — запрос выполнен успешно, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени, 404 — запрос несуществующего сегмента. — responceHeader: заголовок HTTP-ответа. — response: тело ответа. — paramThrowable: исключение при возникновении ошибки, например, если имя сегмента не соответствует требованиям, выбрасывается IllegalArgumentException.
Пример кода:
BucketQuota quota = new BucketQuota(1000000);
PutBuckeQuotaRequest quotaRequest = new PutBukkeQuotaRequest(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());
}
});
getBucketQuota
Метод: public void getBucketQuota (GetBucketQuotaRequest request, GetBucketQuotaResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException.
Параметры: — resultHandler: интерфейс обратного вызова, содержит методы onSuccess и onFailure, работает в основном потоке. — request: объект GetBucketQuotaRequest.
Параметры обратного вызова: — statesCode: код состояния HTTP-запроса, 200 — запрос выполнен успешно, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени, 404 — запрос несуществующего сегмента. — responceHeader: заголовок HTTP-ответа. — quota: объект BucketQuota. — paramThrowable: исключение при возникновении ошибки, например, если имя сегмента не соответствует требованиям, выбрасывается IllegalArgumentException.
Пример кода:
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.
* *Параметры:*
* resultHandler —* обратный интерфейс, содержит методы onSuccess и onFailure, работает в основном потоке;
* request —* DeleteBucketQuotaRequest.
* *Обратные параметры:*
* statesCode —* код состояния HTTP-запроса, 200 означает успешный запрос, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени, 404 — запрос несуществующего Bucket;
* responceHeader —* заголовки ответа HTTP-запроса;
* response —* тело ответа;
* paramThrowable —* исключение при ошибке, например, если имя Bucket не соответствует требованиям, выбрасывается IllegalArgumentException.
* *Пример кода:*
```java
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 ());
}
});
Put Bucket POLICY:
Метод: public void putBucketPolicy (PutBuckePolicyRequest request, Ks3HttpResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException.
Параметры:
Обратные параметры:
Пример кода:
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
``` **statesCode**: код состояния HTTP-запроса, 200 означает успешное выполнение запроса, 400 — ошибку клиентского запроса, 403 — ошибку подписи или локальную ошибку даты и времени, 404 — отсутствие указанного Bucket или Object.
**responceHeader**: заголовок ответа HTTP-запроса.
**responce**: текст ответа при ошибке.
**throwable**: исключение при возникновении ошибки.
**file**: файл, в который записываются данные после успешного выполнения.
**object**: объект Ks3Object после успешного выполнения запроса.
* *Пример кода:*
```java
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 требует внимания
//Прогресс от 0 до 100, тип double
}
});
Проверка существования указанного объекта
Метод:
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) {
}
});
Удаление указанного объекта
Метод:
public void deleteObject(String bucketname, String objectKey , DeleteObjectRequestHandler handler) throws Ks3ClientException, Ks3ServiceException{}
Параметры:
В запросе не указано, какие именно параметры передаются методу. resultHandler: обратный интерфейс, содержащий методы onSuccess и onFailure, которые выполняются в основном потоке.
Параметры обратного вызова:
Код примера:
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) {
// ...
}});
Удаление указанного объекта
Метод: 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) {
// ...
}});
Получение 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) {
// ...
}
});
Получение 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,
``` Заголовок: **Методы для работы с ACL в Amazon S3**.
Текст описывает три метода работы с Access Control List (ACL) в Amazon Simple Storage Service (S3): putObjectACL. Эти методы позволяют устанавливать права доступа к объектам в корзине S3.
В запросе приведены описания трёх методов putObjectACL, которые принимают разные параметры и имеют немного отличающиеся сигнатуры. Методы устанавливают права доступа к объекту в корзине Amazon S3.
**Первый метод** принимает три параметра: bucketName, objectKey и CannedAccessControlList list. Также он использует параметр resultHandler — это обработчик ответа, который содержит два метода: onSuccess и onFailure. Метод выполняется в основном потоке.
**Второй метод** также устанавливает права доступа к объекту, но принимает другие параметры: bucketName, objectName и AccessControlList list, а также resultHandler.
**Третий метод** позволяет установить права доступа к объекту с помощью объекта PutObjectACLRequest. Этот метод также принимает параметр resultHandler и выполняется в главном потоке. **Поместить объект: загрузить данные объекта**
**Метод:**
public Ks3HttpRequest PutObject(String bucketname, String objectkey, File file, PutObjectResponseHandler handler) throws Ks3ClientException,
*bucketname* — имя корзины;
*objectkey* — ключ объекта;
*file* — файл;
*handler* — обработчик ответа на операцию помещения объекта.
**Описание параметров:**
* *handler* — интерфейс обратного вызова, который содержит два метода обратного вызова: onSuccess и onFailure. Они выполняются в основном потоке.
* *bucketname* — указывает имя корзины.
* *objectkey* — определяет ключ объекта.
* *file* — загружаемый файл.
**Обратные параметры:**
* *statesCode* — код состояния HTTP-запроса. Значение 200 означает успешное выполнение запроса, 400 — ошибку клиента, 403 — ошибку подписи или локальную ошибку даты и времени, 404 — отсутствие корзины.
* *responceHeader* — заголовки HTTP-ответа.
* *response* — текст ответа при ошибке.
* *throwable* — исключение при ошибке. **Параметры:**
* resultHandler: интерфейс обратного вызова, содержащий методы onSuccess и onFailure, выполняется в основном потоке.
* bucketname: указанное имя Bucket.
* objectKey: указанный ключ Object.
* file: файл, который необходимо загрузить.
**Параметры обратного вызова:**
* statesCode: код состояния HTTP-запроса, 200 означает успешное выполнение запроса, 400 — ошибку клиентского запроса, 403 — ошибку подписи или локальную ошибку даты и времени.
* responceHeader: заголовок ответа HTTP-запроса.
* responce: текст ответа при ошибке.
* throwable: исключение при возникновении ошибки.
**Пример кода:**
```java
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
}
});
Загрузка данных объекта
Метод: 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
}
});
Копирование объекта
Метод: 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) {
}
});
``` **Инициализация многокомпонентной загрузки:**
*Вызов этого интерфейса инициирует многокомпонентную загрузку. Сервер KS3 возвращает идентификатор загрузки (upload id), который используется для идентификации конкретных блоков, связанных с текущим объектом, а также для обозначения завершения или отмены многокомпонентной загрузки.*
**Метод:**
public void initiateMultipartUpload(String bucketname, String objectkey, InitiateMultipartUploadResponceHandler resultHandler) throws Ks3ClientException, Ks3ServiceException;
**Параметры:**
* resultHandler — интерфейс обратного вызова, включающий методы onSuccess и onFailure, которые выполняются в основном потоке;
* bucketname — указанное имя корзины;
* objectKey — указанный ключ объекта.
**Обратные параметры:**
* statesCode — код состояния HTTP-запроса: 200 — запрос выполнен успешно, 400 — ошибка клиентского запроса, 403 — ошибка подписи или локальная ошибка даты и времени;
* responceHeader — заголовки ответа HTTP-запроса;
* responce — текст ответа при ошибке;
* result — объект результата успешной инициализации многокомпонентной загрузки, содержащий информацию об uploadId и т. д.
**Пример кода:**
```java
``` **Throwable**: исключение, которое возникает при ошибке.
* **Result**: успешное возвращение сущности класса UploadPartResult, которая содержит информацию о номере части (partNumber) и Etag.
**Пример кода:**
```java
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();
}
Перечисление уже загруженных блоков.
Имя метода:
public void ListParts(String bucketname, String objectkey, String uploadId, int maxParts, ListPartsResponseHandler handler) throws Ks3ClientException, Ks3ServiceException{}
Описание параметров:
Параметры обратного вызова:
AbortMultipartUploadRequest (bucketname, objectkey, uploadId), новый 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) {
... **Сборка и завершение многокомпонентной загрузки**
Сборка ранее загруженных блоков и завершение многокомпонентной загрузки. Сборка блоков выполняется на основе предоставленного XML-файла. В XML-файле блоки должны быть упорядочены по возрастанию номеров. Необходимо предоставить значение ETag для каждого блока.
**Метод:**
public void completeMultipartUpload(CompleteMultipartUploadRequest request, CompleteMultipartUploadResponseHandler handler) throws Ks3ClientException,Ks3ServiceException{}
**Параметры:**
* resultHandler: интерфейс обратного вызова, содержащий методы onSuccess и onFailure, которые выполняются в основном потоке.
* request: класс запроса, который должен содержать uploadId, файл для загрузки и информацию о его смещении и размере.
**Обратные параметры:**
* statesCode: код состояния HTTP-запроса, 200 означает успешное выполнение запроса, 400 — ошибку клиента, 403 — ошибку подписи или локальную ошибку даты и времени.
* responceHeader: заголовки ответа HTTP-запроса.
* response: ответное сообщение при ошибке.
* throwable: исключение при возникновении ошибки.
* result: объект результата при успешном выполнении.
Пример кода:
```java
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 = ");
``` ```
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());
}
});
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )