全部产品
Search
文档中心

Object Storage Service:Upload sederhana (Android SDK)

更新时间:Dec 07, 2025

Upload sederhana menggunakan metode PutObject untuk mengunggah satu file, yang disebut sebagai objek. Anda dapat mengunggah file lokal atau array byte[] biner melalui upload sederhana.

Catatan penggunaan

  • Sebelum menjalankan kode contoh dalam topik ini, Anda harus membuat instans OSSClient dengan metode seperti menggunakan nama domain kustom atau Security Token Service (STS). Untuk informasi selengkapnya, lihat Inisialisasi (Android SDK).

Izin

Secara default, Akun Alibaba Cloud memiliki izin penuh. Pengguna RAM atau Peran RAM di bawah Akun Alibaba Cloud tidak memiliki izin apa pun secara default. Akun Alibaba Cloud atau administrator akun harus memberikan izin operasi melalui RAM Policy atau Kebijakan bucket.

API

Action

Definisi

PutObject

oss:PutObject

Mengunggah sebuah objek.

oss:PutObjectTagging

Saat mengunggah objek, jika Anda menentukan tag objek melalui x-oss-tagging, izin ini diperlukan.

kms:GenerateDataKey

Saat mengunggah objek, jika metadata objek berisi X-Oss-Server-Side-Encryption: KMS, kedua izin ini diperlukan.

kms:Decrypt

Unggah file lokal

Anda dapat mengunggah file lokal ke OSS secara sinkron atau asinkron.

Unggah secara sinkron

Kode berikut menunjukkan cara mengunggah file lokal examplefile.txt secara sinkron sebagai objek bernama exampleobject.txt ke folder exampledir/ dalam bucket examplebucket.

// Buat permintaan upload.
// Tentukan nama bucket (misalnya, examplebucket), path lengkap objek (misalnya, exampledir/exampleobject.txt), dan path lengkap file lokal (misalnya, /storage/emulated/0/oss/examplefile.txt).
// Path lengkap objek tidak boleh berisi nama bucket.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

// Menyetel metadata file bersifat opsional.
 ObjectMetadata metadata = new ObjectMetadata();
// metadata.setContentType("application/octet-stream"); // Setel tipe konten.
// metadata.setContentMD5(BinaryUtil.calculateBase64Md5(uploadFilePath)); // Verifikasi hash MD5.
// Setel izin akses objek ke private.
metadata.setHeader("x-oss-object-acl", "private");
// Setel kelas penyimpanan objek ke Standard.
metadata.setHeader("x-oss-storage-class", "Standard");
// Cegah penimpaan objek dengan nama yang sama.
// metadata.setHeader("x-oss-forbid-overwrite", "true");
// Tentukan tag objek. Anda dapat menentukan beberapa tag.
// metadata.setHeader("x-oss-tagging", "a:1");
// Tentukan algoritma enkripsi sisi server yang digunakan OSS untuk membuat objek tujuan.
// metadata.setHeader("x-oss-server-side-encryption", "AES256");
// Menentukan customer master key (CMK) yang dikelola oleh KMS. Parameter ini hanya berlaku ketika x-oss-server-side-encryption diatur ke KMS.
// metadata.setHeader("x-oss-server-side-encryption-key-id", "9468da86-3509-4f8d-a61e-6eab1eac****");

put.setMetadata(metadata);

try {
    PutObjectResult putResult = oss.putObject(put);

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // Exception pada client, seperti exception jaringan.
    e.printStackTrace();
} catch (ServiceException e) {
    // Exception pada server.
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

Untuk penyimpanan terpartisi pada Android 10 atau versi lebih baru, gunakan URI file untuk mengunggah file ke OSS.

// Buat permintaan upload.
// Tentukan nama bucket (misalnya, examplebucket) dan path lengkap objek (misalnya, exampledir/exampleobject.txt).
// Path lengkap objek tidak boleh berisi nama bucket.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt",fileUri);

// Setel metadata file.
// ObjectMetadata metadata = new ObjectMetadata();
// Setel Content-Type.
// metadata.setContentType("text/plain"); 
// Verifikasi hash MD5.
// metadata.setContentMD5(BinaryUtil.calculateBase64Md5(uploadFilePath)); 
// put.setMetadata(metadata);

try {
    PutObjectResult putResult = oss.putObject(put);

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // Exception pada client, seperti exception jaringan.
    e.printStackTrace();
} catch (ServiceException e) {
    // Exception pada server.
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

Unggah secara asinkron

Catatan

Di Android, Anda harus memanggil operasi API sinkron dari subthread, bukan dari UI thread. Jika tidak, akan terjadi exception. Untuk mengunggah langsung dari UI thread, gunakan operasi API asinkron.

Kode berikut menunjukkan cara mengunggah file lokal examplefile.txt secara asinkron sebagai objek bernama exampleobject.txt ke folder exampledir/ dalam bucket examplebucket.

// Buat permintaan upload.
// Tentukan nama bucket (misalnya, examplebucket), path lengkap objek (misalnya, exampledir/exampleobject.txt), dan path lengkap file lokal (misalnya, /storage/emulated/0/oss/examplefile.txt).
// Path lengkap objek tidak boleh berisi nama bucket.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

// Anda dapat menyetel callback progres untuk upload 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) {
        // Exception permintaan.
        if (clientExcepion != null) {
            // Exception pada client, seperti exception jaringan.
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // Exception pada server.
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});
// Batalkan tugas upload.
// task.cancel(); 
// Tunggu hingga tugas upload selesai.
// task.waitUntilFinished(); 

Untuk penyimpanan terpartisi pada Android 10 atau versi lebih baru, gunakan URI file untuk mengunggah file ke OSS.

// Buat permintaan upload.
// Tentukan nama bucket (misalnya, examplebucket) dan path lengkap objek (misalnya, exampledir/exampleobject.txt).
// Path lengkap objek tidak boleh berisi nama bucket.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", fileUri);

// Anda dapat menyetel callback progres untuk upload 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) {
        // Exception permintaan.
        if (clientExcepion != null) {
            // Exception pada client, seperti exception jaringan.
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // Exception pada server.
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});
// Batalkan tugas upload.
// task.cancel(); 
// Tunggu hingga tugas upload selesai.
// task.waitUntilFinished(); 

Unggah array byte[] biner

Kode berikut menunjukkan cara mengunggah array byte[] biner secara sinkron sebagai objek bernama exampleobject.txt ke folder exampledir/ dalam bucket examplebucket.

byte[] uploadData = new byte[100 * 1024];
new Random().nextBytes(uploadData);

// Buat permintaan upload.
// Tentukan nama bucket (misalnya, examplebucket) dan path lengkap objek (misalnya, exampledir/exampleobject.txt).
// Path lengkap objek tidak boleh berisi nama bucket.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", uploadData);

try {
    PutObjectResult putResult = oss.putObject(put);

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // Exception pada client, seperti exception jaringan.
    e.printStackTrace();
} catch (ServiceException e) {
    // Exception pada server.
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

Referensi