全部产品
Search
文档中心

Object Storage Service:Menyalin file (Android SDK)

更新时间:Dec 06, 2025

Topik ini menjelaskan cara menyalin objek dalam satu bucket atau antar-bucket di wilayah yang sama.

Perhatian

  • Untuk menyalin file, Anda harus memiliki izin baca pada file sumber serta izin baca dan tulis pada bucket tujuan.

  • Penyalinan lintas wilayah tidak didukung. Misalnya, Anda tidak dapat menyalin file dari bucket di wilayah China (Hangzhou) ke bucket di wilayah China (Qingdao).

  • Ukuran file yang akan disalin tidak boleh melebihi 1 GB.

  • Sebelum menjalankan kode contoh dalam topik ini, Anda harus membuat instans OSSClient dengan menggunakan metode seperti 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 Kebijakan RAM atau Kebijakan bucket.

API

Action

Definisi

CopyObject

oss:GetObject

Menyalin objek dalam satu bucket atau antar-bucket di wilayah yang sama.

oss:PutObject

oss:GetObjectVersion

Jika Anda menentukan versi objek sumber melalui versionId, izin ini juga diperlukan.

oss:GetObjectTagging

Jika Anda menyalin tag objek melalui x-oss-tagging, izin-izin ini diperlukan.

oss:PutObjectTagging

oss:GetObjectVersionTagging

Jika Anda menentukan tag untuk versi tertentu dari objek sumber melalui versionId, izin ini juga diperlukan.

kms:GenerateDataKey

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

kms:Decrypt

Kode contoh

Kode berikut menunjukkan cara menyalin file:

// Tentukan nama bucket sumber.
String srcBucketName = "src-bucket";
// Tentukan path lengkap objek di bucket sumber.
String srcObjectKey = "dir1/source-object.txt";
// Tentukan nama bucket tujuan, yang harus berada di wilayah yang sama dengan bucket sumber.
String destBucketName = "dest-bucket";
// Tentukan path lengkap objek di bucket tujuan.
String destObjectKey = "dir2/destination-object.txt";
// Buat permintaan salin.
CopyObjectRequest copyObjectRequest = new CopyObjectRequest(srcBucketName, srcObjectKey, destBucketName, destObjectKey);

// ObjectMetadata objectMetadata = new ObjectMetadata();
// Atur daftar kontrol akses (ACL) objek. Dalam contoh ini, ACL diatur ke private.
// objectMetadata.setHeader("x-oss-object-acl", "private");
// Atur kelas penyimpanan objek. Dalam contoh ini, kelas penyimpanan diatur ke Standard.
// objectMetadata.setHeader("x-oss-storage-class", "Standard");
// Tentukan apakah objek yang sudah ada dengan nama yang sama di bucket tujuan akan ditimpa. Dalam contoh ini, nilai diatur ke true, yang berarti objek yang ada tidak dapat ditimpa.
// objectMetadata.setHeader("x-oss-forbid-overwrite", "true");
// Operasi salin hanya dilakukan jika ETag objek sumber sesuai dengan ETag yang ditentukan.
// objectMetadata.setHeader("x-oss-copy-source-if-match", "5B3C1A2E053D763E1B002CC607C5****");
// Tentukan alamat sumber untuk operasi salin.
// objectMetadata.setHeader("x-oss-copy-source", "/example-bucket/recode-test.txt");
// Operasi salin hanya dilakukan jika ETag objek sumber tidak sesuai dengan ETag yang ditentukan.
// objectMetadata.setHeader("x-oss-copy-source-if-none-match", "5B3C1A2E053D763E1B002CC607C5****");
// Operasi salin hanya dilakukan jika waktu modifikasi aktual objek lebih awal dari atau sama dengan waktu yang ditentukan.
// objectMetadata.setHeader("x-oss-copy-source-if-unmodified-since", "2021-12-09T07:01:56.000Z");
// Operasi salin hanya dilakukan jika objek sumber dimodifikasi setelah waktu yang ditentukan.
// objectMetadata.setHeader("x-oss-copy-source-if-modified-since", "2021-12-09T07:01:56.000Z");
// Tentukan cara mengonfigurasi metadata objek tujuan. Dalam contoh ini, nilai diatur ke COPY, yang berarti metadata objek sumber disalin ke objek tujuan.
// objectMetadata.setHeader("x-oss-metadata-directive", "COPY");
// Tentukan algoritma enkripsi sisi server yang digunakan OSS untuk membuat objek tujuan.
// objectMetadata.setHeader("x-oss-server-side-encryption", "SSE-KMS");
// Kunci master pelanggan (CMK) yang dikelola oleh KMS. Parameter ini hanya berlaku ketika x-oss-server-side-encryption diatur ke KMS.
// objectMetadata.setHeader("x-oss-server-side-encryption-key-id", "9468da86-3509-4f8d-a61e-6eab1eac****");
// Tentukan tag objek. Anda dapat menentukan beberapa tag sekaligus.
// objectMetadata.setHeader("x-oss-tagging", "a:1");
// Tentukan cara mengonfigurasi tag objek tujuan. Dalam contoh ini, nilai diatur ke COPY, yang berarti tag objek sumber disalin ke objek tujuan.
// objectMetadata.setHeader("x-oss-tagging-directive", "COPY");

// Lakukan salinan asinkron.
OSSAsyncTask copyTask = oss.asyncCopyObject(copyObjectRequest, new OSSCompletedCallback<CopyObjectRequest, CopyObjectResult>() {
    @Override
    public void onSuccess(CopyObjectRequest request, CopyObjectResult result) {
        Log.d("copyObject", "copy success!");
    }

    @Override
    public void onFailure(CopyObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // Permintaan gagal.
        if (clientExcepion != null) {
            // Terjadi exception pada client, seperti exception jaringan.
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // Terjadi exception pada sisi server.
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});

Referensi