All Products
Search
Document Center

Object Storage Service:Unduhan sederhana file OSS

Last Updated:May 07, 2026

Unduhan sederhana menggunakan operasi API GetObject untuk mengunduh objek dalam satu permintaan HTTP.

Prasyarat

  • Objek telah diunggah ke OSS. Untuk informasi selengkapnya, lihat Unggah objek.

  • Jika Anda ingin mengunduh objek dengan kelas penyimpanan Archive, pastikan objek tersebut telah dipulihkan atau fitur Archive Direct Read telah diaktifkan untuk bucket tersebut. Untuk informasi selengkapnya, lihat Pulihkan objek.

  • Untuk mengunduh objek dari kelas penyimpanan Cold Archive atau Deep Cold Archive, Anda harus memulihkannya terlebih dahulu. Untuk informasi selengkapnya, lihat Pulihkan objek.

Metode

Penting

Karena adanya perubahan kebijakan untuk meningkatkan kepatuhan dan keamanan, mulai 20 Maret 2025, pengguna OSS baru harus menggunakan nama domain kustom (CNAME) untuk melakukan operasi API data pada bucket OSS yang berlokasi di wilayah Tiongkok Daratan. Titik akhir publik default dibatasi untuk operasi ini. Lihat pengumuman resmi untuk daftar lengkap operasi yang terdampak. Jika Anda mengakses data melalui HTTPS, Anda harus menyambungkan Sertifikat SSL yang valid ke domain kustom Anda. Hal ini wajib untuk akses Konsol OSS, karena konsol menerapkan HTTPS.

Konsol OSS

Catatan

Anda tidak dapat mengunduh direktori beserta subdirektorinya dari Konsol OSS. Untuk mengunduh direktori, gunakan alat seperti ossbrowser, ossutil, SDK OSS, atau operasi API.

  1. Masuk ke Konsol OSS.

  2. Di panel navigasi sebelah kiri, klik Buckets. Pada halaman yang muncul, klik nama bucket target.

  3. Di panel navigasi sebelah kiri, pilih Object Management > Objects.

  4. Unduh satu atau beberapa objek.

    • Unduh satu objek

      Metode 1: Di kolom Actions objek target, pilih more > Download.

      Catatan

      Jika Anda telah memindahkan operasi ini dari bagian default Added to More ke bagian Common Operations, Anda dapat langsung mengklik opsi tersebut tanpa perlu membuka ikon more.

      Metode 2: Klik nama objek target atau klik View Details di kolom Actions. Di panel Detail yang muncul, klik Download.

    • Unduh beberapa objek

      Pilih beberapa objek lalu klik Download. Anda dapat mengunduh hingga 100 objek sekaligus dari Konsol OSS.

ossbrowser

ossbrowser mendukung operasi tingkat objek yang mirip dengan yang didukung di Konsol OSS. Ikuti petunjuk di layar pada klien ossbrowser untuk melakukan unduhan sederhana. Untuk informasi selengkapnya tentang cara menggunakan ossbrowser, lihat Operasi umum.

OSS SDK

Bagian berikut menyediakan contoh kode untuk melakukan unduhan sederhana menggunakan SDK OSS untuk bahasa pemrograman umum. Untuk informasi tentang unduhan sederhana yang menggunakan SDK OSS lainnya, lihat Ikhtisar SDK.

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;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, digunakan endpoint wilayah Tiongkok (Hangzhou). Tentukan endpoint aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan 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. Jangan sertakan nama bucket dalam path lengkap. Contoh: testfolder/exampleobject.txt.
        String objectName = "testfolder/exampleobject.txt";
        // Tentukan path lengkap file lokal tempat Anda ingin mengunduh objek.
        String pathName = "D:\\localpath\\examplefile.txt";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket Anda berada di wilayah Tiongkok (Hangzhou), atur wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya terkait ketika OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Unduh objek ke path yang ditentukan. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan di path tersebut.
            // Jika Anda tidak menentukan path lokal untuk objek yang diunduh, objek tersebut akan disimpan di path proyek tempat program contoh berada.
            ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(pathName));
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS,");
            System.out.println("tetapi ditolak dengan tanggapan error karena suatu alasan.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami");
            System.out.println("masalah internal serius saat mencoba berkomunikasi dengan OSS,");
            System.out.println("seperti tidak dapat mengakses jaringan.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}   
const OSS = require('ali-oss');

const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
  region: 'yourRegion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan Anda telah mengonfigurasi variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Tentukan nama bucket.
  bucket: 'examplebucket'
});

async function get () {
  try {
    // Tentukan path lengkap objek dan file lokal. Jangan sertakan nama bucket dalam path lengkap objek.
    // Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan sebagai file lokal.
    // Jika Anda tidak menentukan path untuk objek yang diunduh, objek tersebut akan disimpan di path proyek tempat program contoh berada.
    const result = await client.get('exampleobject.txt', 'D:\\localpath\\examplefile.txt');
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

get(); 
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>

  <body>
    <!-- Impor file SDK -->
    <script
      type="text/javascript"
      src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"
    ></script>
    <script type="text/javascript">
      const client = new OSS({
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah menjadi oss-cn-hangzhou.
        region: "yourRegion",
        authorizationV4: true,
        // Tentukan pasangan AccessKey sementara yang diperoleh dari STS. Pasangan AccessKey terdiri dari ID AccessKey dan Rahasia AccessKey.
        accessKeyId: "yourAccessKeyId",
        accessKeySecret: "yourAccessKeySecret",
        // Tentukan token keamanan yang diperoleh dari STS.
        stsToken: "yoursecurityToken",
        // Tentukan nama bucket.
        bucket: "examplebucket",
      });

      // Atur header respons agar objek diunduh secara otomatis menggunakan URL, dan atur nama file lokal setelah objek diunduh.
      const filename = "examplefile.txt";
      const response = {
        "content-disposition": `attachment; filename=${encodeURIComponent(
          filename
        )}`,
      };
      // Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap.
      const url = client.signatureUrl("exampleobject.txt", { response });
      console.log(url);
    </script>
  </body>
</html>
// Buat permintaan unduhan objek.
// Tentukan nama bucket dan path lengkap objek. Dalam contoh ini, nama bucket adalah examplebucket dan path lengkap objek adalah exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap.
GetObjectRequest get = new GetObjectRequest("examplebucket", "exampledir/exampleobject.txt");

oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
    @Override
    public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// Mulai membaca data.
        long length = result.getContentLength();
        if (length > 0) {
            byte[] buffer = new byte[(int) length];
            int readCount = 0;
            while (readCount < length) {
                try{
                    readCount += result.getObjectContent().read(buffer, readCount, (int) length - readCount);
                }catch (Exception e){
                    OSSLog.logInfo(e.toString());
                }
            }
    // Tentukan path lengkap objek yang diunduh. Contoh: D:\\localpath\\exampleobject.jpg.
            try {
                FileOutputStream fout = new FileOutputStream("download_filePath");
                fout.write(buffer);
                fout.close();
            } catch (Exception e) {
                OSSLog.logInfo(e.toString());
            }
        }
    }

    @Override
    public void onFailure(GetObjectRequest request, ClientException clientException,
                          ServiceException serviceException)  {

    }
});
OSSGetObjectRequest * request = [OSSGetObjectRequest new];

// Tentukan nama bucket. Contoh: examplebucket.
request.bucketName = @"examplebucket";
// Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam path lengkap.
request.objectKey = @"exampledir/exampleobject.txt";

// Konfigurasi bidang opsional.
request.downloadProgress = ^(int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite) {
    // Tentukan jumlah byte yang sedang diunduh, jumlah byte yang telah diunduh, dan jumlah total byte yang ingin diunduh.
    NSLog(@"%lld, %lld, %lld", bytesWritten, totalBytesWritten, totalBytesExpectedToWrite);
};
// request.range = [[OSSRange alloc] initWithStart:0 withEnd:99]; // bytes=0-99. Tentukan bahwa rentang unduhan adalah dari byte 0 hingga byte 99.
// request.downloadToFileURL = [NSURL fileURLWithPath:@"<filepath>"]; // Jika Anda perlu langsung mengunduh objek ke file, tentukan path file tersebut.

OSSTask * getTask = [client getObject:request];

[getTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"unduh objek berhasil!");
        OSSGetObjectResult * getResult = task.result;
        NSLog(@"hasil unduhan: %@", getResult.downloadedData);
    } else {
        NSLog(@"unduh objek gagal, error: %@" ,task.error);
    }
    return nil;
}];

// [getTask waitUntilFinished];

// [request cancel];
#include <alibabacloud/oss/OssClient.h>
#include <memory>
#include <fstream>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun yang digunakan untuk mengakses OSS. */
            
    /* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah menjadi cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";
    /* Unduh objek sebagai file lokal bernama examplefile.txt dan simpan file tersebut ke D:\\localpath. Jika file dengan nama yang sama sudah ada di path yang ditentukan, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan di path tersebut. */
    /* Jika Anda tidak menentukan path file lokal, objek yang diunduh akan disimpan di path proyek tempat program contoh berada. */
    std::string FileNametoSave = "D:\\localpath\\examplefile.txt";

    /* Inisialisasi sumber daya seperti sumber daya jaringan. */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Unduh objek sebagai file lokal. */
    GetObjectRequest request(BucketName, ObjectName);
    request.setResponseStreamFactory([=]() {return std::make_shared<std::fstream>(FileNametoSave, std::ios_base::out | std::ios_base::in | std::ios_base::trunc| std::ios_base::binary); });

    auto outcome = client.GetObject(request);

    if (outcome.isSuccess()) {    
        std::cout << "GetObjectToFile berhasil" << outcome.result().Metadata().ContentLength() << std::endl;
    }
    else {
        /* Tangani pengecualian. */
        std::cout << "GetObjectToFile gagal" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya seperti sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur endpoint menjadi https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";

/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Tentukan path lengkap file lokal. */
const char *local_filename = "yourLocalFilename";
/* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), atur wilayah menjadi cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Gunakan string char* untuk menginisialisasi data bertipe aos_string_t. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */    
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // Tentukan dua parameter tambahan.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Tentukan apakah akan menggunakan CNAME. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Tentukan parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di main() untuk menginisialisasi sumber daya global, seperti sumber daya jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Buat pool memori untuk mengelola memori. aos_pool_t setara dengan apr_pool_t. Kode untuk membuat pool memori termasuk dalam library APR. */
    aos_pool_t *pool;
    /* Buat pool memori. Nilai parameter kedua adalah NULL. Nilai ini menunjukkan bahwa pool tidak mewarisi pool memori lainnya. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini mencakup informasi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan sumber daya memori dalam pool memori ke opsi. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;
    aos_table_t *params;
    aos_table_t *headers = NULL;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_str_set(&file, local_filename);
    params = aos_table_make(pool, 0);
    /* Unduh objek ke file lokal Anda. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, file baru akan dibuat. */
    resp_status = oss_get_object_to_file(oss_client_options, &bucket, &object, headers, params, &file, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("Mendapatkan objek dari file berhasil\n");
    } else {
        printf("Mendapatkan objek dari file gagal\n");
    }  
    /* Lepaskan pool memori. Operasi ini melepaskan sumber daya memori yang dialokasikan untuk permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan sumber daya global yang dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}
require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Dalam contoh ini, digunakan endpoint wilayah Tiongkok (Hangzhou). Tentukan endpoint aktual Anda.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tentukan nama bucket. Contoh: examplebucket.
bucket = client.get_bucket('examplebucket')
# Unduh objek ke komputer lokal Anda.
bucket.get_object('exampleobject.txt', :file => 'D:\\localpath\\examplefile.txt')
package main

import (
	"context"
	"flag"
	"log"
	"net/http"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Definisikan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Gunakan fungsi init untuk menginisialisasi parameter.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing parameter.
	flag.Parse()

	// Periksa apakah nama bucket kosong.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket wajib diisi")
	}

	// Periksa apakah wilayah kosong.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah wajib diisi")
	}

	// Periksa apakah nama objek kosong.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek wajib diisi")
	}

	// Muat konfigurasi default dan tentukan penyedia kredensial serta wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Tentukan path file lokal.
	localFile := "download.file"

	// Misalnya, objek terakhir dimodifikasi pada pukul 18:43:02, 21 November 2023. Jika waktu yang ditentukan dalam kondisi IfModifiedSince lebih awal dari waktu modifikasi terakhir, objek akan diunduh.
	date := time.Date(2024, time.October, 21, 18, 43, 2, 0, time.UTC)

	// Asumsikan ETag objek adalah e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855. Jika ETag yang ditentukan dalam kondisi IfMatch cocok dengan ETag objek, objek akan diunduh.
	etag := "\"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\""

	// Buat permintaan untuk mengunduh objek.
	getRequest := &oss.GetObjectRequest{
		Bucket:          oss.Ptr(bucketName),                   // Nama bucket.
		Key:             oss.Ptr(objectName),                   // Nama objek.
		IfModifiedSince: oss.Ptr(date.Format(http.TimeFormat)), // Tentukan kondisi IfModifiedSince.
		IfMatch:         oss.Ptr(etag),                         // Tentukan kondisi IfMatch.
	}

	// Unduh objek ke perangkat lokal dan proses hasilnya.
	result, err := client.GetObjectToFile(context.TODO(), getRequest, localFile)
	if err != nil {
		log.Fatalf("gagal mengunduh objek ke file %v", err)
	}

	log.Printf("hasil mengunduh objek ke file:%#v\n", result)
}
import argparse
import alibabacloud_oss_v2 as oss
import os

# Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="contoh get object")

# Tambahkan argumen baris perintah --region untuk menentukan wilayah tempat bucket berada. Argumen ini wajib diisi.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
# Tambahkan argumen baris perintah --bucket untuk menentukan nama bucket. Argumen ini wajib diisi.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint untuk menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini tidak wajib diisi.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key untuk menentukan nama objek. Argumen ini wajib diisi.
parser.add_argument('--key', help='Nama objek.', required=True)

def main():
    # Parsing argumen baris perintah.
    args = parser.parse_args()

    # Muat kredensial dari variabel lingkungan untuk verifikasi identitas.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # Muat konfigurasi default SDK dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # Atur wilayah dalam konfigurasi.
    cfg.region = args.region

    # Jika endpoint disediakan, atur endpoint dalam konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Gunakan informasi yang dikonfigurasi untuk membuat klien OSS.
    client = oss.Client(cfg)

    # Jalankan permintaan untuk mendapatkan objek. Tentukan nama bucket dan nama objek.
    result = client.get_object(oss.GetObjectRequest(
        bucket=args.bucket,  # Tentukan nama bucket.
        key=args.key,  # Tentukan kunci objek.
    ))

    # Cetak hasil mendapatkan objek untuk memeriksa apakah permintaan berhasil.
    print(f'kode status: {result.status_code},'
          f' id permintaan: {result.request_id},'
          f' panjang konten: {result.content_length},'
          f' rentang konten: {result.content_range},'
          f' tipe konten: {result.content_type},'
          f' etag: {result.etag},'
          f' terakhir dimodifikasi: {result.last_modified},'
          f' md5 konten: {result.content_md5},'
          f' kontrol cache: {result.cache_control},'
          f' disposisi konten: {result.content_disposition},'
          f' encoding konten: {result.content_encoding},'
          f' kedaluwarsa: {result.expires},'
          f' hash crc64: {result.hash_crc64},'
          f' kelas penyimpanan: {result.storage_class},'
          f' tipe objek: {result.object_type},'
          f' id versi: {result.version_id},'
          f' jumlah tagging: {result.tagging_count},'
          f' enkripsi sisi server: {result.server_side_encryption},'
          f' enkripsi data sisi server: {result.server_side_data_encryption},'
          f' posisi append berikutnya: {result.next_append_position},'
          f' kedaluwarsa: {result.expiration},'
          f' pulihkan: {result.restore},'
          f' status proses: {result.process_status},'
          f' penanda hapus: {result.delete_marker},'
    )

    # ========== Metode 1: Baca seluruh objek ==========
    with result.body as body_stream:
        data = body_stream.read()
        print(f"File telah dibaca. Panjang data: {len(data)} byte")

        path = "./get-object-sample.txt"
        with open(path, 'wb') as f:
            f.write(data)
        print(f"File telah diunduh dan disimpan ke path: {path}")

    # # ========== Metode 2: Baca dalam potongan ==========
    # with result.body as body_stream:
    #     chunk_path = "./get-object-sample-chunks.txt"
    #     total_size = 0

    #     with open(chunk_path, 'wb') as f:
    #         # Gunakan ukuran blok 256 KB. Anda dapat mengubah parameter block_size sesuai kebutuhan.
    #         for chunk in body_stream.iter_bytes(block_size=256 * 1024):
    #             f.write(chunk)
    #             total_size += len(chunk)
    #             print(f"Blok data diterima: {len(chunk)} byte | Total: {total_size} byte")

    #     print(f"File telah diunduh dan disimpan ke path: {chunk_path}")

# Saat skrip ini dijalankan secara langsung, fungsi main dipanggil.
if __name__ == "__main__":
    main()  # Titik masuk skrip. Saat file dijalankan secara langsung, fungsi main dipanggil.
<?php

// Impor file autoloader untuk memastikan library dependensi dimuat dengan benar.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Definisikan deskripsi parameter baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // Wilayah tempat bucket berada. (Wajib diisi)
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // Endpoint. (Opsional)
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // Nama bucket. (Wajib diisi)
    "key" => ['help' => 'Nama objek', 'required' => True], // Nama objek. (Wajib diisi)
];

// Konversi deskripsi parameter ke format opsi panjang yang diperlukan oleh getopt.
// Tanda titik dua ":" setelah setiap parameter menunjukkan bahwa parameter memerlukan nilai.
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// Parsing parameter baris perintah.
$options = getopt("", $longopts);

// Periksa apakah parameter yang wajib diisi tersedia.
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // Dapatkan informasi bantuan parameter.
        echo "Error: argumen berikut wajib diisi: --$key, $help" . PHP_EOL;
        exit(1); // Jika parameter wajib tidak tersedia, keluar dari program.
    }
}

// Ekstrak nilai dari parameter yang telah diparsing.
$region = $options["region"]; // Wilayah tempat bucket berada.
$bucket = $options["bucket"]; // Nama bucket.
$key = $options["key"];       // Nama objek.

// Muat informasi kredensial dari variabel lingkungan.
// Gunakan EnvironmentVariableCredentialsProvider untuk membaca ID Access Key dan Rahasia Access Key dari variabel lingkungan.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Gunakan konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Atur penyedia kredensial.
$cfg->setRegion($region); // Atur wilayah tempat bucket berada.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // Jika endpoint disediakan, atur endpoint.
}

// Buat instance klien OSS.
$client = new Oss\Client($cfg);

// Buat objek GetObjectRequest untuk mendapatkan konten objek yang ditentukan.
$request = new Oss\Models\GetObjectRequest(bucket: $bucket, key: $key);

// Jalankan operasi get object.
$result = $client->getObject($request);

// Definisikan path file lokal yang akan disimpan.
$localFilePath = 'path/to/local/file.txt'; // Ganti dengan path file aktual.

// Tulis konten ke file lokal.
file_put_contents( $localFilePath, $result->body->getContents());

// Cetak hasilnya.
// Keluarkan kode status HTTP, ID permintaan, dan konten objek.
printf(
    'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, 200 menunjukkan permintaan berhasil.
    'id permintaan:' . $result->requestId . PHP_EOL  // ID permintaan, digunakan untuk debugging atau pelacakan permintaan.
);

ossutil CLI

Anda dapat menggunakan alat baris perintah ossutil untuk mengunduh objek. Untuk informasi tentang cara menginstal ossutil, lihat Instal ossutil.

Perintah berikut mengunduh objek exampleobject dari bucket examplebucket.

ossutil api get-object --bucket examplebucket --key exampleobject

Untuk informasi selengkapnya tentang perintah ini, lihat get-object.

Referensi API

Metode yang dijelaskan dalam topik ini diimplementasikan berdasarkan operasi API GetObject. Jika Anda memerlukan kustomisasi lebih lanjut, Anda dapat memanggil operasi API REST GetObject secara langsung, yang mengharuskan Anda menghitung signature secara manual. Untuk informasi selengkapnya, lihat GetObject.

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

Aksi

Deskripsi

GetObject

oss:GetObject

Mengunduh objek.

oss:GetObjectVersion

Saat mengunduh objek, jika Anda menentukan versi objek melalui versionId, izin ini diperlukan.

kms:Decrypt

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

Penagihan

Item yang dapat ditagih berikut berlaku untuk unduhan sederhana. Untuk informasi selengkapnya tentang harga satuan item yang dapat ditagih, lihat Harga Layanan Penyimpanan Objek.

API

Item yang dapat ditagih

Deskripsi

GetObject

Permintaan GET

Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.

Lalu lintas keluar melalui Internet

Jika Anda memanggil operasi GetObject menggunakan titik akhir publik, seperti oss-cn-hangzhou.aliyuncs.com, atau titik akhir percepatan, seperti oss-accelerate.aliyuncs.com, Anda dikenai biaya lalu lintas keluar melalui Internet berdasarkan ukuran data.

Pengambilan data objek IA

Jika objek IA diambil, Anda dikenai biaya pengambilan data IA berdasarkan ukuran data IA yang diambil.

Pengambilan objek Archive di bucket yang diaktifkan akses real-time

Jika Anda mengambil objek Archive di bucket yang diaktifkan akses real-time, Anda dikenai biaya pengambilan data Archive berdasarkan ukuran objek Archive yang diambil.

Biaya akselerasi transfer

Jika Anda mengaktifkan akselerasi transfer dan menggunakan titik akhir percepatan untuk mengakses bucket Anda, Anda dikenai biaya akselerasi transfer berdasarkan ukuran data.

Referensi