全部产品
Search
文档中心

Object Storage Service:Unggah yang dapat dilanjutkan (Java SDK V1)

更新时间:Nov 26, 2025

Saat menggunakan unggah yang dapat dilanjutkan untuk mengunggah file ke Object Storage Service (OSS), Anda dapat menentukan file titik pemeriksaan. Jika pengunggahan terganggu oleh error jaringan atau crash program, proses akan dilanjutkan dari posisi yang dicatat dalam file tersebut.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk detail wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.

  • Kredensial akses pada topik ini diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.

  • Untuk melakukan unggah yang dapat dilanjutkan, Anda harus memiliki izin oss:PutObject. Untuk informasi lebih lanjut, lihat Lampirkan kebijakan kustom ke RAM user.

Kode contoh

Kode berikut menunjukkan contoh cara melakukan unggah yang dapat dilanjutkan.

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class UploadFile {
        public static void main(String[] args) throws Exception {
            // Contoh ini menggunakan titik akhir wilayah China (Hangzhou). Tentukan titik akhir yang sebenarnya.
            String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
            String region = "cn-hangzhou";
            // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
            EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();

            // Buat instans OSSClient.
            // Setelah instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya.
            ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
            clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
            OSS ossClient = OSSClientBuilder.create()
                    .endpoint(endpoint)
                    .credentialsProvider(credentialsProvider)
                    .clientConfiguration(clientBuilderConfiguration)
                    .region(region)
                    .build();

            try {
                ObjectMetadata meta = new ObjectMetadata();
                // Tentukan tipe konten objek yang akan diunggah.
                // meta.setContentType("text/plain");

                // Atur daftar kontrol akses (ACL) untuk objek selama pengunggahan.
                // meta.setObjectAcl(CannedAccessControlList.Private);

                // Atur beberapa parameter menggunakan UploadFileRequest.
                // Tentukan nama bucket, misalnya examplebucket, dan path lengkap objek, misalnya exampledir/exampleobject.txt. Path lengkap tidak boleh mengandung nama bucket.
                UploadFileRequest uploadFileRequest = new UploadFileRequest("examplebucket","exampledir/exampleobject.txt");

                // Atur satu parameter menggunakan UploadFileRequest.
                // Tentukan path lengkap file lokal, misalnya D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan path lokal, file akan diunggah dari path proyek tempat program contoh berada.
                uploadFileRequest.setUploadFile("D:\\localpath\\examplefile.txt");
                // Tentukan jumlah thread konkuren untuk pengunggahan. Nilai default adalah 1.
                uploadFileRequest.setTaskNum(5);
                // Tentukan ukuran bagian dalam byte. Nilainya harus berada dalam rentang 100 KB hingga 5 GB. Nilai default adalah 100 KB.
                uploadFileRequest.setPartSize(1 * 1024 * 1024);
                // Aktifkan unggah yang dapat dilanjutkan. Fitur ini dinonaktifkan secara default.
                uploadFileRequest.setEnableCheckpoint(true);
                // File yang mencatat progres unggah multi-bagian. Progres pengunggahan disimpan dalam file ini. Jika suatu bagian gagal diunggah, pengunggahan akan dilanjutkan dari titik putus yang tercatat saat Anda mencoba lagi. Setelah pengunggahan selesai, file ini akan dihapus.
                // Jika Anda tidak mengatur parameter ini, file titik pemeriksaan akan disimpan di direktori yang sama dengan file lokal yang diunggah dan diberi nama ${uploadFile}.ucp.
                uploadFileRequest.setCheckpointFile("yourCheckpointFile");
                // Metadata file.
                uploadFileRequest.setObjectMetadata(meta);
                // Atur callback unggahan. Parameter ini bertipe Callback.
                //uploadFileRequest.setCallback("yourCallbackEvent");

                // Lakukan unggah yang dapat dilanjutkan.
                ossClient.uploadFile(uploadFileRequest);

            } catch (OSSException oe) {
                System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                        + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
                System.out.println("Pesan Error:" + oe.getErrorMessage());
                System.out.println("Kode Error:" + oe.getErrorCode());
                System.out.println("ID Permintaan:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (Throwable ce) {
                System.out.println("Terjadi ClientException, yang berarti client mengalami "
                        + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                        + "misalnya tidak dapat mengakses jaringan.");
                System.out.println("Pesan Error:" + ce.getMessage());
            } finally {
                // Matikan instans OSSClient.
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
}

Referensi

Untuk kode contoh lengkap unggah yang dapat dilanjutkan, lihat contoh GitHub.