Topik ini menjelaskan cara menggunakan OSS Android SDK untuk melakukan operasi umum, seperti membuat bucket, mengunggah file (Object), dan mengunduh file.
Prasyarat
Android SDK telah diinstal. Untuk informasi selengkapnya, lihat Install the Android SDK.
Proyek contoh
Bagian berikut menjelaskan cara menggunakan proyek contoh:
Lihat folder contoh, yang berisi contoh operasi seperti mengunggah file lokal, mengunduh file, unggah yang dapat dilanjutkan, dan mengatur callback. Untuk informasi selengkapnya, lihat GitHub.
Jalankan perintah git clone untuk mengkloning project.
Sebelum menjalankan proyek ini, Anda harus mengonfigurasi parameter Config yang diperlukan. Kode berikut memberikan contoh konfigurasi:
public class Config {
// Wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan wilayah sesuai kebutuhan aktual Anda.
public static final String OSS_ENDPOINT = "https://oss-cn-hangzhou.aliyuncs.com";
// Tentukan URL callback.
public static final String OSS_CALLBACK_URL = "https://oss-demo.aliyuncs.com:23450";
// Tentukan alamat server otentikasi STS.
// Anda juga dapat menjalankan server otentikasi STS lokal menggunakan skrip di direktori sts_local_server proyek.
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;
}Untuk informasi selengkapnya tentang cara mengonfigurasi alamat server otentikasi STS, lihat Quickly build a service for direct data transfer from mobile apps.
Untuk informasi selengkapnya tentang skrip sts_local_server, lihat GitHub.
Untuk informasi selengkapnya tentang cara membuat Pasangan Kunci Akses, lihat Create an AccessKey pair.
Membuat bucket
Bucket adalah namespace global di OSS. Bucket berfungsi sebagai wadah untuk data dan dapat menyimpan beberapa file. Kode berikut menunjukkan cara membuat bucket.
// Tetapkan yourEndpoint ke Titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan region ke cn-hangzhou.
String region = "yourRegion";
// ID AccessKey dan Rahasia AccessKey temporary yang diperoleh dari STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Token keamanan yang diperoleh dari STS.
String securityToken = "yourSecurityToken";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// Buat instans OSSClient.
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);
// Tentukan nama bucket.
CreateBucketRequest createBucketRequest = new CreateBucketRequest("bucketName");
// Tetapkan daftar kontrol akses (ACL) bucket ke public-read. ACL default bersifat private.
createBucketRequest.setBucketACL(CannedAccessControlList.PublicRead);
// Tentukan wilayah tempat bucket berada.
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) {
// Permintaan gagal.
if (clientException != null) {
// Terjadi pengecualian lokal, seperti pengecualian jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Terjadi pengecualian sisi server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});Upload a file
Kode berikut menunjukkan cara mengunggah file lokal ke OSS.
// Tetapkan yourEndpoint ke Titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// ID AccessKey dan Rahasia AccessKey temporary yang diperoleh dari STS.
// Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan region ke cn-hangzhou.
String region = "yourRegion";
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Token keamanan yang diperoleh dari STS.
String securityToken = "yourSecurityToken";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// Buat instans OSSClient.
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);
// Buat permintaan unggah.
PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectName>", "<uploadFilePath>");
// Tetapkan callback progres untuk unggah asinkron.
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) {
// Permintaan gagal.
if (clientExcepion != null) {
// Terjadi pengecualian lokal, seperti pengecualian jaringan.
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// Terjadi pengecualian sisi server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
// task.cancel(); // Anda dapat membatalkan tugas.
// task.waitUntilFinished(); // Tunggu hingga unggah selesai.Download a file
Kode berikut menunjukkan cara mengunduh file OSS ke file lokal.
// Tetapkan yourEndpoint ke Titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan Titik akhir ke https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// ID AccessKey dan Rahasia AccessKey temporary yang diperoleh dari STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Token keamanan yang diperoleh dari STS.
String securityToken = "yourSecurityToken";
// Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan region ke cn-hangzhou.
String region = "yourRegion";
OSSCredentialProvider credentialProvider = new OSSStsTokenCredentialProvider(accessKeyId, accessKeySecret, securityToken);
ClientConfiguration config = new ClientConfiguration();
config.setSignVersion(SignVersion.V4);
// Buat instans OSSClient.
OSSClient oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider);
oss.setRegion(region);
// Buat permintaan unduh.
GetObjectRequest get = new GetObjectRequest("<bucketName>", "<objectName>");
OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@Override
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// Permintaan berhasil.
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) {
// Anda dapat menulis kode di sini untuk memproses data yang diunduh.
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
// Jika permintaan GetObject berhasil, GetObjectResult akan dikembalikan. GetObjectResult berisi instans aliran input. Anda harus memproses aliran input yang dikembalikan.
public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// Permintaan gagal.
if (clientExcepion != null) {
// Terjadi pengecualian lokal, seperti pengecualian jaringan.
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// Terjadi pengecualian sisi server.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
// Batalkan tugas.
// task.cancel();
// Tunggu hingga tugas selesai.
// task.waitUntilFinished();