All Products
Search
Document Center

Object Storage Service:Unduhan bersyarat (Java SDK V1)

Last Updated:Nov 26, 2025

Saat mengunduh objek dari bucket, Anda dapat menentukan kondisi berdasarkan waktu modifikasi terakhir objek atau ETag-nya. ETag merupakan pengidentifikasi konten objek tersebut. Objek hanya akan diunduh jika kondisi yang ditentukan terpenuhi; jika tidak, sistem akan mengembalikan error dan unduhan tidak dilakukan. Unduhan bersyarat membantu mengurangi lalu lintas jaringan serta konsumsi sumber daya, sekaligus meningkatkan efisiensi proses unduhan.

Kondisi

OSS mendukung kondisi-kondisi berikut:

Catatan
  • If-Modified-Since dan If-Unmodified-Since dapat digunakan secara bersamaan. Demikian pula, If-Match dan If-None-Match dapat digunakan secara bersamaan.

  • Untuk mendapatkan ETag, gunakan metode ossClient.getObjectMeta.

Parameter

Deskripsi

If-Modified-Since

Jika waktu yang ditentukan lebih awal daripada waktu modifikasi aktual, file akan ditransfer. Jika tidak, error 304 Not Modified dikembalikan.

If-Unmodified-Since

Jika waktu yang ditentukan sama dengan atau lebih baru daripada waktu modifikasi aktual, file akan ditransfer. Jika tidak, error 412 Precondition Failed dikembalikan.

If-Match

Jika ETag yang ditentukan sesuai dengan ETag objek OSS, file akan ditransfer. Jika tidak, error 412 Precondition Failed dikembalikan.

If-None-Match

Jika ETag yang ditentukan tidak sesuai dengan ETag objek OSS, file akan ditransfer. Jika sesuai, error 304 Not Modified dikembalikan.

Catatan penggunaan

  • Pada topik ini, digunakan 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 Regions and endpoints.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Configure access credentials.

  • 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 Configuration examples for common scenarios.

  • Untuk melakukan unduhan bersyarat, Anda harus memiliki izin oss:GetObject. Untuk informasi lebih lanjut, lihat Grant custom permissions to a RAM user.

Kode contoh

Kode contoh berikut menunjukkan cara menggunakan metode ossClient.getObject untuk melakukan unduhan bersyarat. Metode ossClient.downloadFile juga mendukung unduhan bersyarat dan digunakan dengan cara yang serupa.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;
import java.util.Date;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir yang sebenarnya.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, 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. Jangan sertakan nama bucket. Contoh: testfolder/exampleobject.txt.
        String objectName = "testfolder/exampleobject.txt";
        String pathName = "D:\\localpath\\examplefile.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 digunakan lagi, panggil metode shutdown untuk melepas resource.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            // Asumsikan objek terakhir dimodifikasi pada 13:27:04, 26 September 2023. Jika Anda menentukan waktu yang lebih awal, seperti Tue Sep 25 13:27:04 CST 2023, kondisi If-Modified-Since terpenuhi dan unduhan dilakukan.
            request.setModifiedSinceConstraint(new Date("Tue Sep 25 13:27:04 CST 2023"));

            // Unduh objek OSS ke file lokal.
            ossClient.getObject(request, new File(pathName));
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                    + "tetapi ditolak karena suatu alasan tertentu.");
            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 (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien 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();
            }
        }
    }
}
        

Referensi

Untuk informasi lebih lanjut tentang operasi API untuk unduhan bersyarat, lihat GetObject.