本文介紹如何快速使用OSS Android SDK完成常見操作,例如創建存儲空間、上傳文件(Object)、下載文件等。
前提條件
已安裝Android SDK。具體操作,請參見安裝。
示例工程
示例工程用法如下:
運行本工程前,您需要配置必要參數Config。Config配置示例如下:
public class Config {
// Endpoint以華東1(杭州)為例,其它Region請按實際情況填寫。
public static final String OSS_ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";
// 填寫callback地址。
public static final String OSS_CALLBACK_URL = "https://oss-demo.aliyuncs.com:23450";
// 填寫STS鑒權服務器地址。
// 您還可以根據工程sts_local_server目錄中本地鑒權服務腳本代碼啟動本地STS鑒權服務器。
public static final String STS_SERVER_URL = "http://****/sts/getsts";
public static final String BUCKET_NAME = "yourBucketName";
public static final String OSS_ACCESS_KEY_ID = "yourAccessKeyId";;
public static final String OSS_ACCESS_KEY_SECRET = "yourAccessKeySecret";
public static final int DOWNLOAD_SUC = 1;
public static final int DOWNLOAD_Fail = 2;
public static final int UPLOAD_SUC = 3;
public static final int UPLOAD_Fail = 4;
public static final int UPLOAD_PROGRESS = 5;
public static final int LIST_SUC = 6;
public static final int HEAD_SUC = 7;
public static final int RESUMABLE_SUC = 8;
public static final int SIGN_SUC = 9;
public static final int BUCKET_SUC = 10;
public static final int GET_STS_SUC = 11;
public static final int MULTIPART_SUC = 12;
public static final int STS_TOKEN_SUC = 13;
public static final int FAIL = 9999;
public static final int REQUESTCODE_AUTH = 10111;
public static final int REQUESTCODE_LOCALPHOTOS = 10112;
}
關于如何配置STS鑒權服務器地址,請參見快速搭建移動應用直傳服務。
關于sts_local_server 腳本內容,請參見GitHub。
關于如何創建AccessKey,請參見創建AccessKey。
運行工程demo如下:
創建存儲空間
存儲空間是OSS的全局命名空間,相當于數據的容器,可以存儲若干文件。以下代碼用于創建存儲空間。
// yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// yourEndpoint填寫Bucket所在地域。以華東1(杭州)為例,region填寫為cn-hangzhou。
String region = "yourRegion";
// 從STS服務獲取的臨時訪問密鑰(AccessKey ID和AccessKey Secret)。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 從STS服務獲取的安全令牌(SecurityToken)。
String securityToken = "yourSecurityToken";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// 創建OSSClient實例。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);
// 填寫存儲空間名稱。
CreateBucketRequest createBucketRequest = new CreateBucketRequest("bucketName");
// 設置存儲空間的訪問權限為公共讀,默認為私有讀寫。
createBucketRequest.setBucketACL(CannedAccessControlList.PublicRead);
// 指定存儲空間所在的地域。
createBucketRequest.setLocationConstraint("oss-cn-hangzhou");
OSSAsyncTask createTask = oss.asyncCreateBucket(createBucketRequest, new OSSCompletedCallback<CreateBucketRequest, CreateBucketResult>() {
@Override
public void onSuccess(CreateBucketRequest request, CreateBucketResult result) {
Log.d("locationConstraint", request.getLocationConstraint());
}
@Override
public void onFailure(CreateBucketRequest request, ClientException clientException, ServiceException serviceException) {
// 請求異常。
if (clientException != null) {
// 本地異常,如網絡異常等。
clientException.printStackTrace();
}
if (serviceException != null) {
// 服務異常。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
上傳文件
以下代碼用于將本地文件上傳到OSS。
// yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 從STS服務獲取的臨時訪問密鑰(AccessKey ID和AccessKey Secret)。
// yourEndpoint填寫Bucket所在地域。以華東1(杭州)為例,region填寫為cn-hangzhou。
String region = "yourRegion";
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 從STS服務獲取的安全令牌(SecurityToken)。
String securityToken = "yourSecurityToken";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// 創建OSSClient實例。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);
// 構造上傳請求。
PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectName>", "<uploadFilePath>");
// 異步上傳時可以設置進度回調。
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
@Override
public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
}
});
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
@Override
public void onSuccess(PutObjectRequest request, PutObjectResult result) {
Log.d("PutObject", "UploadSuccess");
Log.d("ETag", result.getETag());
Log.d("RequestId", result.getRequestId());
}
@Override
public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// 請求異常。
if (clientExcepion != null) {
// 本地異常,如網絡異常等。
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// 服務異常。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
// task.cancel(); // 可以取消任務。
// task.waitUntilFinished(); // 等待上傳完成。
下載文件
以下代碼用于下載OSS文件到本地文件。
// yourEndpoint填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
String endpoint = "yourEndpoint";
// 從STS服務獲取的臨時訪問密鑰(AccessKey ID和AccessKey Secret)。
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// 從STS服務獲取的安全令牌(SecurityToken)。
String securityToken = "yourSecurityToken";
// yourEndpoint填寫Bucket所在地域。以華東1(杭州)為例,region填寫為cn-hangzhou。
String region = "yourRegion";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// 創建OSSClient實例。
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);
// 構造下載文件請求。
GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectName>");
OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@Override
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// 請求成功。
Log.d("asyncGetObject", "DownloadSuccess");
Log.d("Content-Length", "" + result.getContentLength());
InputStream inputStream = result.getObjectContent();
byte[] buffer = new byte[2048];
int len;
try {
while ((len = inputStream.read(buffer)) != -1) {
// 您可以在此處編寫代碼來處理下載的數據。
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
// GetObject請求成功,返回GetObjectResult。GetObjectResult包含一個輸入流的實例。您需要自行處理返回的輸入流。
public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// 請求異常。
if (clientExcepion != null) {
// 本地異常,如網絡異常等。
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// 服務異常。
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
// 取消任務。
// task.cancel();
// 等待任務完成。
// task.waitUntilFinished();
文檔內容是否對您有幫助?