Gunakan OSS Android SDK untuk membuat bucket, mengunggah objek, dan mengunduh objek.
Prasyarat
Android SDK telah diinstal. Installation (Android SDK).
Proyek contoh
Untuk menggunakan proyek contoh:
-
Lihat direktori contoh untuk contoh pengunggahan file lokal, pengunduhan objek, unggah yang dapat dilanjutkan, dan callback.
-
Klon proyek menggunakan Git.
Sebelum menjalankan proyek ini, konfigurasikan parameter dalam file Config:
public class Config {
// Pada contoh ini, digunakan endpoint untuk wilayah China (Hangzhou). Tentukan endpoint untuk wilayah 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 URL server otentikasi STS.
// Anda juga dapat menjalankan server otentikasi STS lokal berdasarkan 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 mengonfigurasi URL server otentikasi STS, ikuti Quickly build a mobile app direct upload service.
-
Skrip sts_local_server tersedia di GitHub.
-
Untuk membuat Pasangan Kunci Akses, lihat Create an AccessKey pair.
Buat bucket
Bucket adalah namespace global yang unik di OSS tempat sejumlah objek disimpan.
// Tetapkan yourEndpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Tetapkan region ke wilayah tempat bucket Anda berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan region ke cn-hangzhou.
String region = "yourRegion";
// Pasangan AccessKey sementara (ID AccessKey dan AccessKey Secret) yang diperoleh dari server otentikasi STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Token keamanan yang diperoleh dari server otentikasi 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 adalah 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) {
// Exception pada client, seperti error jaringan.
clientException.printStackTrace();
}
if (serviceException != null) {
// Exception pada layanan.
Log.e("ErrorCode", serviceException.getErrorCode());
Log.e("RequestId", serviceException.getRequestId());
Log.e("HostId", serviceException.getHostId());
Log.e("RawMessage", serviceException.getRawMessage());
}
}
});
Unggah objek
Unggah file lokal ke OSS sebagai objek:
// Tetapkan yourEndpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Tetapkan region ke wilayah tempat bucket Anda berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan region ke cn-hangzhou.
String region = "yourRegion";
// Pasangan AccessKey sementara (ID AccessKey dan AccessKey Secret) yang diperoleh dari server otentikasi STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Token keamanan yang diperoleh dari server otentikasi 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>");
// Anda dapat menetapkan 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) {
// Exception pada client, seperti error jaringan.
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// Exception pada layanan.
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.
Unduh objek
Unduh objek dari OSS ke file lokal:
// Tetapkan yourEndpoint ke endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
String endpoint = "yourEndpoint";
// Pasangan AccessKey sementara (ID AccessKey dan AccessKey Secret) yang diperoleh dari server otentikasi STS.
String accessKeyId = "yourAccessKeyId";
String accessKeySecret = "yourAccessKeySecret";
// Token keamanan yang diperoleh dari server otentikasi STS.
String securityToken = "yourSecurityToken";
// Tetapkan region ke wilayah tempat bucket Anda 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) {
// Tambahkan kode Anda di sini untuk memproses data yang diunduh.
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void onFailure(GetObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
// Permintaan gagal.
if (clientExcepion != null) {
// Exception pada client, seperti error jaringan.
clientExcepion.printStackTrace();
}
if (serviceException != null) {
// Exception pada layanan.
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();