全部产品
Search
文档中心

Object Storage Service:Lakukan unduhan yang dapat dilanjutkan menggunakan OSS SDK untuk Java V1

更新时间:Nov 26, 2025

Pengunduhan file besar dapat gagal akibat ketidakstabilan jaringan atau exception dalam program. Bahkan setelah beberapa kali percobaan, pengunduhan terkadang tetap gagal. Untuk mengatasi masalah ini, Object Storage Service (OSS) menyediakan fitur unduhan yang dapat dilanjutkan, yang membagi file menjadi beberapa bagian, mengunduh masing-masing bagian secara terpisah, lalu menggabungkannya kembali menjadi file utuh.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai 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 Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.

  • Untuk melakukan unduhan yang dapat dilanjutkan, Anda harus memiliki izin oss:GetObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.

Kode contoh

Kode berikut menunjukkan contoh cara melakukan unduhan 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 Demo {
    public static void main(String[] args) throws Exception {
        // Pada contoh ini, digunakan titik akhir wilayah China (Hangzhou). Tentukan titik akhir aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket.
        String bucketName = "examplebucket";
        // Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Path lengkap tidak boleh mengandung nama bucket.
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Setelah instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
      	try {
            // Unduh file menggunakan 10 tugas konkuren.
            DownloadFileRequest downloadFileRequest = new DownloadFileRequest(bucketName, objectName);
            // Tentukan path lengkap file lokal tempat Anda ingin mengunduh objek. Contoh: D:\\localpath\\examplefile.txt.
            downloadFileRequest.setDownloadFile("D:\\localpath\\examplefile.txt");
            // Atur ukuran bagian dalam byte. Nilainya harus berada dalam rentang 100 KB hingga 5 GB. Nilai default adalah 100 KB.
            downloadFileRequest.setPartSize(1 * 1024 * 1024);
            // Atur jumlah bagian konkuren yang akan diunduh. Nilai default adalah 1.
            downloadFileRequest.setTaskNum(10);
            // Aktifkan unduhan yang dapat dilanjutkan. Fitur ini dinonaktifkan secara default.
            downloadFileRequest.setEnableCheckpoint(true);
            // Tentukan path lengkap file titik pemeriksaan. Contoh: D:\\localpath\\examplefile.txt.dcp.
            // File titik pemeriksaan dibuat saat pengunduhan terputus. Untuk melanjutkan pengunduhan, Anda harus menentukan path lengkap file titik pemeriksaan tersebut. File ini akan dihapus setelah pengunduhan selesai.
            //downloadFileRequest.setCheckpointFile("D:\\localpath\\examplefile.txt.dcp");

            // Unduh file.
            DownloadFileResult downloadRes = ossClient.downloadFile(downloadFileRequest);
            // Jika pengunduhan berhasil, metadata objek akan dikembalikan.
            ObjectMetadata objectMetadata = downloadRes.getObjectMetadata();
            System.out.println(objectMetadata.getETag());
            System.out.println(objectMetadata.getLastModified());
            System.out.println(objectMetadata.getUserMetadata().get("meta"));
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke 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 {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Dokumen terkait

  • Untuk kode contoh lengkap mengenai unduhan yang dapat dilanjutkan, lihat contoh di GitHub.

  • Untuk informasi lebih lanjut tentang operasi API untuk unduhan yang dapat dilanjutkan, lihat GetObject.