All Products
Search
Document Center

Object Storage Service:Simple upload

Last Updated:May 27, 2026

Gunakan simple upload untuk mengunggah objek hingga 5 GB ke OSS ketika konkurensi tinggi tidak diperlukan.

Peringatan

Pada bucket tempat layanan OSS-HDFS diaktifkan, jangan unggah objek ke direktori penyimpanan data .dlsdata/ menggunakan metode apa pun selain layanan OSS-HDFS itu sendiri. Melakukannya dapat menyebabkan layanan tidak berfungsi atau mengakibatkan kehilangan data.

Metode unggah

Sebelum memulai, buat bucket.

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. Ini adalah wajib untuk akses Konsol OSS, karena konsol menerapkan HTTPS.

OSS console

  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. Pada halaman Objects, klik Upload Object.

  5. Di panel Upload Object, pilih file atau folder yang ingin Anda unggah.

    1. Opsional: Konfigurasikan opsi dasar.

      Opsi dasar

      Parameter

      Deskripsi

      Upload to

      Tetapkan jalur tujuan dalam bucket.

      • Current Directory: Unggah objek ke direktori saat ini.

      • Specified Directory: Unggah ke direktori tertentu. Anda harus memasukkan nama direktori. Jika direktori tidak ada, OSS akan membuatnya secara otomatis.

        Nama direktori harus memenuhi persyaratan berikut:

        • Nama harus terdiri dari 1 hingga 254 karakter dan menggunakan encoding UTF-8.

        • Nama tidak boleh dimulai dengan garis miring (/) atau backslash (\).

        • Nama tidak boleh mengandung dua garis miring (/) berturut-turut.

        • Nama tidak boleh berupa ...

      Object ACL

      Tetapkan ACL objek.

      • Inherited from Bucket: Objek mewarisi ACL bucket.

      • Private (Direkomendasikan): Hanya pemilik objek yang memiliki izin baca dan tulis untuk objek tersebut.

      • Public Read: Pemilik objek memiliki izin baca dan tulis, sedangkan pengguna lain, termasuk pengguna anonim, memiliki akses read-only. Ini dapat menyebabkan kebocoran data dan biaya tambahan. Gunakan opsi ini dengan hati-hati.

      • Public Read/Write: Semua pengguna, termasuk pengguna anonim, dapat membaca dan menulis objek. Ini dapat menyebabkan kebocoran data dan biaya tambahan. Jika pengguna jahat mengunggah informasi ilegal, Anda mungkin bertanggung jawab secara hukum. Jangan pilih opsi ini kecuali diperlukan.

      Object ACL.

      Files to Upload

      Pilih file atau folder untuk diunggah.

      Klik Select Files atau Select Folders untuk memilih file atau folder lokal. Anda juga dapat menyeret file atau folder target ke area unggah.

      Untuk mengecualikan file dari unggahan, klik Remove di sampingnya.

      Penting
      • Jika Anda mengunggah objek dengan nama yang sama seperti objek yang sudah ada ke bucket tempat versioning dinonaktifkan, unggahan tersebut akan menimpa objek yang ada.

      • Jika Anda mengunggah objek dengan nama yang sama seperti objek yang sudah ada ke bucket tempat versioning diaktifkan, objek yang diunggah menjadi versi saat ini dan objek yang ada menjadi versi sebelumnya.

    2. Opsional: Konfigurasikan opsi lanjutan, seperti kelas penyimpanan dan metode enkripsi sisi server.

      Opsi lanjutan

      Parameter

      Deskripsi

      Storage Class

      Tetapkan kelas penyimpanan.

      • Inherited from Bucket: Objek mewarisi kelas penyimpanan bucket.

      • Standard: Menyediakan layanan penyimpanan objek yang sangat andal, tersedia, dan berkinerja tinggi yang mendukung akses data yang sering. Cocok untuk berbagai kasus penggunaan, seperti aplikasi sosial dan berbagi, situs web besar, dan analitik data besar. Kelas penyimpanan Standard mendukung penyimpanan redundan zona (ZRS) dan penyimpanan redundan lokal (LRS).

      • Infrequent Access: Menyediakan penyimpanan objek yang sangat tahan lama dengan biaya penyimpanan rendah. Memiliki ukuran tagihan minimum 64 KB dan durasi penyimpanan minimum 30 hari. Mendukung akses data real-time. Mengakses data menimbulkan biaya pengambilan. Kelas penyimpanan ini cocok untuk skenario bisnis dengan frekuensi akses rendah, seperti satu hingga dua kali per bulan rata-rata. Kelas penyimpanan Infrequent Access mendukung ZRS dan LRS.

      • Archive Storage: Menyediakan penyimpanan objek yang sangat tahan lama dengan biaya penyimpanan yang sangat rendah. Memiliki ukuran tagihan minimum 64 KB dan durasi penyimpanan minimum 60 hari. Data Archive Storage dapat diakses setelah dipulihkan, yang membutuhkan waktu sekitar satu menit, atau diakses langsung. Data yang dipulihkan menimbulkan biaya pengambilan, sedangkan data yang diakses langsung menimbulkan biaya akses real-time. Archive Storage cocok untuk retensi data jangka panjang, seperti arsip, gambar medis, data ilmiah, dan rekaman video. Kelas penyimpanan Archive Storage mendukung ZRS dan LRS.

      • Cold Archive: Menyediakan penyimpanan objek yang sangat tahan lama dengan biaya lebih rendah daripada Archive Storage. Memiliki ukuran tagihan minimum 64 KB dan durasi penyimpanan minimum 180 hari. Data harus dipulihkan sebelum diakses. Waktu pemulihan tergantung pada ukuran data dan mode pemulihan yang dipilih. Pemulihan menimbulkan biaya pengambilan data dan permintaan. Kelas penyimpanan ini cocok untuk data dingin yang memerlukan penyimpanan jangka sangat panjang, seperti data yang disimpan untuk kepatuhan, data mentah yang terakumulasi di bidang data besar dan artificial intelligence (AI), aset media di industri film dan televisi, serta video arsip di industri pendidikan online. Kelas penyimpanan Cold Archive hanya mendukung LRS.

      • Deep Cold Archive: Menyediakan penyimpanan objek yang sangat tahan lama dengan biaya lebih rendah daripada Cold Archive. Memiliki ukuran tagihan minimum 64 KB dan durasi penyimpanan minimum 180 hari. Data harus dipulihkan sebelum diakses. Waktu pemulihan tergantung pada ukuran data dan mode pemulihan yang dipilih. Pemulihan menimbulkan biaya pengambilan data dan permintaan. Kelas penyimpanan ini cocok untuk data sangat dingin yang memerlukan penyimpanan jangka ultra-panjang, seperti retensi jangka panjang data mentah di bidang data besar dan AI, retensi jangka panjang data media, arsip regulasi dan kepatuhan, serta penggantian pita. Kelas penyimpanan Deep Cold Archive hanya mendukung LRS.

      Ikhtisar kelas penyimpanan.

      Encryption Method

      Tetapkan metode enkripsi sisi server.

      • Inherited from Bucket: Objek mewarisi metode enkripsi sisi server bucket.

      • OSS-Managed: Objek dienkripsi dengan kunci yang dikelola oleh OSS. OSS menggunakan kunci unik untuk setiap objek, dan untuk keamanan tambahan, kunci data ini juga dienkripsi dengan kunci master.

      • KMS: Gunakan kunci master pelanggan (CMK) default yang dikelola oleh KMS atau ID CMK tertentu untuk mengenkripsi dan mendekripsi data. Berikut ini menjelaskan parameter CMK:

        • alias/acs/oss(CMK ID): OSS menggunakan kunci layanan default untuk mengenkripsi data dalam bucket dan secara otomatis mendekripsi objek saat Anda mengunduhnya.

        • alias/<cmkname>(CMK ID): OSS mengenkripsi data dalam bucket dengan CMK yang ditentukan dan mencatat ID-nya dalam metadata objek. OSS kemudian secara otomatis mendekripsi objek untuk pengguna dengan izin yang diperlukan. <cmkname> adalah alias opsional yang Anda konfigurasikan saat membuat kunci.

          Sebelum menggunakan ID CMK tertentu, Anda perlu membuat kunci umum atau kunci eksternal di wilayah yang sama dengan Bucket di konsol KMS. Untuk operasi detail, lihat Create a CMK

      • Encryption Algorithm: Hanya AES256 yang didukung.

      User-defined Metadata

      Tambahkan metadata kustom ke objek. Ukuran total semua entri tidak boleh melebihi 8 KB. Setiap kunci harus dimulai dengan awalan x-oss-meta- dan diberi nilai, misalnya, x-oss-meta-location:hangzhou.

  6. Klik Upload Object.

    Anda kemudian dapat melihat progres unggah objek di tab Upload Tasks.

Ossbrowser

Sebelum menggunakan ossbrowser untuk simple upload, instal ossbrowser 2.0 dan masuk ke ossbrowser 2.0.

  1. Klik nama bucket tujuan.

  2. Klik Upload, lalu pilih file atau folder untuk diunggah.

    Anda dapat melihat progres unggah di pojok kanan atas.

Alibaba Cloud SDKs

Unggah file lengkap

Unggah file lokal ke bucket tertentu.

Java

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial akses dan menginstal OSS SDK for Java V1.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.File;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir 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 jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. 
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt. 
        // Secara default, jika jalur file lokal tidak ditentukan, file lokal diunggah dari jalur proyek tempat program contoh berada. 
        String filePath= "D:\\localpath\\examplefile.txt";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";
        
        // Buat instance OSSClient. 
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 {
            // Buat objek PutObjectRequest. 
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
            // Kode contoh berikut memberikan contoh cara menentukan kelas penyimpanan dan ACL objek saat Anda mengunggah objek: 
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);
            
            // Unggah file lokal. 
            PutObjectResult result = ossClient.putObject(putObjectRequest);           
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS SDK untuk Python.

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="put object from file sample")

# Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)

# Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)

# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')

# Tambahkan argumen baris perintah --key, yang menentukan nama objek. Argumen ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)

# Tambahkan argumen baris perintah --file_path, yang menentukan jalur file lokal untuk diunggah. Argumen ini wajib.
parser.add_argument('--file_path', help='Jalur file yang diunggah.', 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 kit pengembangan perangkat lunak (SDK) dan atur penyedia kredensial.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

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

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

    # Buat klien OSS menggunakan konfigurasi yang ditentukan.
    client = oss.Client(cfg)

    # Jalankan permintaan untuk mengunggah objek langsung dari file.
    # Tentukan nama bucket, nama objek, dan jalur file lokal.
    result = client.put_object_from_file(
        oss.PutObjectRequest(
            bucket=args.bucket,  # Nama bucket.
            key=args.key         # Nama objek.
        ),
        args.file_path          # Jalur file lokal.
    )

    # Cetak informasi hasil permintaan, termasuk kode status, ID permintaan, Content-MD5, ETag, hash cyclic redundancy check (CRC64) 64-bit, ID versi, dan waktu respons server.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
          f' waktu server: {result.headers.get("x-oss-server-time")},'
    )

# Titik masuk skrip. Fungsi utama dipanggil saat file dijalankan secara langsung.
if __name__ == "__main__":
    main()

Go

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS SDK untuk Go.

package main

import (
	"context"
	"flag"
	"log"

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

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

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
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 baris perintah.
	flag.Parse()

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

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

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

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

	// Buat instance OSSClient.
	client := oss.NewClient(cfg)

	// Tentukan jalur file lokal yang ingin Anda unggah. Contoh: /Users/localpath/exampleobject.txt.
	localFile := "/Users/localpath/exampleobject.txt"

	// Buat permintaan untuk mengunggah file lokal.
	putRequest := &oss.PutObjectRequest{
		Bucket:       oss.Ptr(bucketName),      // Tentukan nama bucket.
		Key:          oss.Ptr(objectName),      // Tentukan nama objek.
		StorageClass: oss.StorageClassStandard, // Atur kelas penyimpanan objek ke Standard.
		Acl:          oss.ObjectACLPrivate,     // Atur daftar kontrol akses (ACL) objek ke private.
		Metadata: map[string]string{
			"yourMetadataKey 1": "yourMetadataValue 1", // Tentukan metadata objek.
		},
	}

	// Jalankan permintaan untuk mengunggah file lokal.
	result, err := client.PutObjectFromFile(context.TODO(), putRequest, localFile)
	if err != nil {
		log.Fatalf("gagal mengunggah objek dari file %v", err)
	}

	// Tampilkan hasil operasi unggah objek.
	log.Printf("hasil unggah objek dari file:%#v\n", result)
}

Node.js

const OSS = require('ali-oss')
const path=require("path")

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

// Header permintaan kustom
const headers = {
  // Tentukan kelas penyimpanan objek.
  'x-oss-storage-class': 'Standard',
  // Tentukan izin akses objek.
  'x-oss-object-acl': 'private',
  // Saat file diakses menggunakan URL-nya, tentukan bahwa file tersebut diunduh sebagai lampiran. File yang diunduh diberi nama example.txt.
  'Content-Disposition': 'attachment; filename="example.txt"',
  // Atur tag untuk objek. Anda dapat mengatur beberapa tag sekaligus.
  'x-oss-tagging': 'Tag1=1&Tag2=2',
  // Tentukan apakah akan menimpa objek yang memiliki nama yang sama selama operasi PutObject. Parameter ini diatur ke true untuk mencegah objek ditimpa.
  'x-oss-forbid-overwrite': 'true',
};

async function put () {
  try {
    // Tentukan jalur lengkap objek OSS dan jalur lengkap file lokal. Jalur lengkap objek OSS tidak boleh berisi nama bucket.
    // Jika Anda tidak menentukan jalur lokal dalam jalur lengkap file lokal, file tersebut diunggah dari jalur lokal proyek tempat program contoh berada.
    const result = await client.put('exampleobject.txt', path.normalize('D:\\localpath\\examplefile.txt')
    // Header kustom
    ,{headers}
    );
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

PHP

<?php

// Masukkan file autoload untuk memuat pustaka dependen.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// Tentukan deskripsi untuk parameter baris perintah.
$optsdesc = [
    "region" => ['help' => 'Wilayah tempat bucket berada.', 'required' => True], // (Wajib) Tentukan wilayah tempat bucket berada.
    "endpoint" => ['help' => 'Nama domain yang dapat digunakan layanan lain untuk mengakses OSS.', 'required' => False], // (Opsional) Tentukan titik akhir yang dapat digunakan layanan lain untuk mengakses OSS.
    "bucket" => ['help' => 'Nama bucket', 'required' => True], // (Wajib) Tentukan nama bucket.
    "key" => ['help' => 'Nama objek', 'required' => True], // (Wajib) Tentukan nama objek.
    "file" => ['help' => 'Jalur lokal ke file yang ingin Anda unggah.', 'required' => True], // (Wajib) Tentukan jalur file lokal.
];

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

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

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

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

// Dapatkan kredensial akses dari variabel lingkungan.
// Dapatkan ID AccessKey dan rahasia AccessKey dari variabel lingkungan EnvironmentVariableCredentialsProvider.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

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

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

// Periksa apakah file lokal ada.
if (!file_exists($file)) {
    echo "Kesalahan: File yang ditentukan tidak ada." . PHP_EOL; // Jika file lokal tidak ada, tampilkan pesan kesalahan dan keluar dari program.
    exit(1);
}

// Buka file lokal dan siapkan untuk tugas unggah sederhana.
// Gunakan fopen untuk membuka file lokal dalam mode read-only dan ubah file menjadi stream dengan menggunakan Utils::streamFor.
$body = Oss\Utils::streamFor(fopen($file, 'r'));

// Buat objek PutObjectRequest untuk mengunggah file lokal.
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request->body = $body; // Tentukan bahwa badan permintaan HTTP adalah stream file.

// Jalankan permintaan unggah sederhana.
$result = $client->putObject($request);

// Tampilkan hasil permintaan unggah sederhana.
// Tampilkan kode status HTTP, ID permintaan, dan ETag objek untuk memeriksa apakah permintaan berhasil.
printf(
    'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
    'ID permintaan:' . $result-> requestId. PHP_EOL // ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
    'etag:' . $result->etag . PHP_EOL // ETag objek, yang digunakan untuk mengidentifikasi konten objek.
);

Browser.js

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <input id="file" type="file" />
    <button id="upload">Upload an Object</button>
    <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
    <script>
      const client = new OSS({
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke 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 Anda peroleh dari STS. 
        stsToken: "yourSecurityToken",
        // Tentukan nama bucket. 
        bucket: "examplebucket",
      });

      // Pilih file lokal dari daftar drop-down. Contoh: <input type="file" id="file" />. 
      let data;
      // Buat dan tentukan data Blob. 
      //const data = new Blob(['Hello OSS']);
      // Buat buffer OSS dan tentukan konten buffer OSS. 
      //const data = new OSS.Buffer(['Hello OSS']);

      const upload = document.getElementById("upload");

      async function putObject(data) {
        try {
          // Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. 
          // Tentukan nama objek atau jalur lengkap objek untuk mengunggah data ke bucket saat ini atau direktori tertentu dalam bucket. Misalnya, atur nama objek ke exampleobject.txt atau jalur objek ke exampledir/exampleobject.txt. 
          // Anda dapat mengatur data ke file, data Blob, atau buffer OSS. 
          const options = {
            meta: { temp: "demo" },
            mime: "json",
            headers: { "Content-Type": "text/plain" },
          };
          const result = await client.put("examplefile.txt", data, options);
          console.log(result);
        } catch (e) {
          console.log(e);
        }
      }

      upload.addEventListener("click", () => {
        const data = file.files[0];
        putObject(data);
      });
    </script>
  </body>
</html>

.NET

using Aliyun.OSS;
using Aliyun.OSS.Common;

// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket. 
var bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. 
var objectName = "exampledir/exampleobject.txt";
// Tentukan jalur lengkap file lokal yang ingin Anda unggah. Secara default, jika Anda tidak menentukan jalur lengkap file lokal, file lokal diunggah dari jalur proyek tempat program contoh berada. 
var localFilename = "D:\\localpath\\examplefile.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan modifikasi parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    // Unggah file lokal. 
    client.PutObject(bucketName, objectName, localFilename);
    Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}

Harmony

import Client, { RequestError } from '@aliyun/oss';

// Buat instance klien OSS.
const client = new Client({
  // Ganti dengan ID Access Key dari kredensial akses sementara STS.
  accessKeyId: 'yourAccessKeyId',
  // Ganti dengan Rahasia Access Key dari kredensial akses sementara STS.
  accessKeySecret: 'yourAccessKeySecret',
  // Ganti dengan token keamanan dari kredensial akses sementara STS.
  securityToken: 'yourSecurityToken',
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Region ke oss-cn-hangzhou.
  region: 'oss-cn-hangzhou',
});

const bucket = 'yourBucketName'; // Ganti dengan nama bucket yang ingin Anda gunakan.

const key = 'yourObjectName'; // Ganti dengan nama objek (file) yang ingin Anda unggah.

const putObject = async () => {
  try {
    // Panggil metode putObject untuk mengunggah data ke bucket dan kunci yang ditentukan, dengan melewatkan data sebagai parameter.
    const res = await client.putObject({
      bucket, // Nama bucket.
      key, // Nama objek (file).
      data: 'hello world' // Data yang akan diunggah. Dalam hal ini, string sederhana.
    });

    // Cetak hasil unggah.
    console.log(JSON.stringify(res));
  } catch (err) {
    // Tangkap pengecualian yang terjadi selama permintaan.
    if (err instanceof RequestError) {
      // Jika kesalahan adalah jenis yang diketahui, cetak kode kesalahan, pesan, ID permintaan, kode status, kode EC, dan informasi lainnya.
      console.log('code: ', err.code);
      console.log('message: ', err.message);
      console.log('requestId: ', err.requestId);
      console.log('status: ', err.status);
      console.log('ec: ', err.ec);
    } else {
      // Cetak jenis kesalahan tak dikenal lainnya.
      console.log('unknown error: ', err);
    }
  }
}

// Panggil fungsi putObject untuk melakukan operasi unggah.
putObject();

Android

// Buat permintaan unggah.
// Tentukan nama bucket (misalnya, examplebucket), jalur lengkap objek (misalnya, exampledir/exampleobject.txt), dan jalur lengkap file lokal (misalnya, /storage/emulated/0/oss/examplefile.txt).
// Jalur lengkap objek tidak boleh berisi nama bucket.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

// Menyetel metadata file bersifat opsional.
 ObjectMetadata metadata = new ObjectMetadata();
// metadata.setContentType("application/octet-stream"); // Atur tipe konten.
// metadata.setContentMD5(BinaryUtil.calculateBase64Md5(uploadFilePath)); // Verifikasi hash MD5.
// Atur izin akses objek ke private.
metadata.setHeader("x-oss-object-acl", "private");
// Atur kelas penyimpanan objek ke Standard.
metadata.setHeader("x-oss-storage-class", "Standard");
// Cegah penimpaan objek dengan nama yang sama.
// metadata.setHeader("x-oss-forbid-overwrite", "true");
// Tentukan tag objek. Anda dapat menentukan beberapa tag.
// metadata.setHeader("x-oss-tagging", "a:1");
// Tentukan algoritma enkripsi sisi server yang digunakan OSS untuk membuat objek tujuan.
// metadata.setHeader("x-oss-server-side-encryption", "AES256");
// Menentukan kunci master pelanggan (CMK) yang dikelola oleh KMS. Parameter ini hanya berlaku ketika x-oss-server-side-encryption diatur ke KMS.
// metadata.setHeader("x-oss-server-side-encryption-key-id", "9468da86-3509-4f8d-a61e-6eab1eac****");

put.setMetadata(metadata);

try {
    PutObjectResult putResult = oss.putObject(put);

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // Pengecualian klien, seperti pengecualian jaringan.
    e.printStackTrace();
} catch (ServiceException e) {
    // Pengecualian server.
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

iOS

OSSPutObjectRequest * put = [OSSPutObjectRequest new];

// Tentukan nama bucket. Misalnya, examplebucket.
put.bucketName = @"examplebucket";
// Tentukan jalur lengkap objek. Misalnya, exampledir/exampleobject.txt. Jalur lengkap tidak boleh berisi nama bucket.
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// put.uploadingData = <NSData *>; // Unggah NSData secara langsung.

// (Opsional) Atur progres unggah.
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    // Panjang unggah saat ini, panjang total yang diunggah, dan panjang total yang akan diunggah.
    NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// Konfigurasi bidang opsional.
// put.contentType = @"application/octet-stream";
// Atur Content-MD5.
// put.contentMd5 = @"eB5eJF1ptWaXm4bijSPyxw==";
// Atur codec objek.
// put.contentEncoding = @"identity";
// Atur format tampilan objek.
// put.contentDisposition = @"attachment";
// Anda dapat mengatur metadata objek atau header HTTP saat mengunggah file.
// NSMutableDictionary *meta = [NSMutableDictionary dictionary];
// Atur metadata file.
// [meta setObject:@"value" forKey:@"x-oss-meta-name1"];
// Atur izin akses objek ke private.
// [meta setObject:@"private" forKey:@"x-oss-object-acl"];
// Atur kelas penyimpanan objek ke Standard.
// [meta setObject:@"Standard" forKey:@"x-oss-storage-class"];
// Timpa objek tujuan yang memiliki nama yang sama.
// [meta setObject:@"true" forKey:@"x-oss-forbid-overwrite"];
// Tentukan tag objek. Anda dapat menentukan beberapa tag.
// [meta setObject:@"a:1" forKey:@"x-oss-tagging"];
// Tentukan algoritma enkripsi sisi server yang digunakan OSS untuk membuat objek tujuan.
// [meta setObject:@"AES256" forKey:@"x-oss-server-side-encryption"];
// Kunci master pelanggan (CMK) yang dikelola oleh KMS. Parameter ini hanya berlaku ketika x-oss-server-side-encryption diatur ke KMS.
// [meta setObject:@"9468da86-3509-4f8d-a61e-6eab1eac****" forKey:@"x-oss-server-side-encryption-key-id"];
// put.objectMeta = meta;
OSSTask * putTask = [client putObject:put];

[putTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"upload object success!");
    } else {
        NSLog(@"upload object failed, error: %@" , task.error);
    }
    return nil;
}];
// waitUntilFinished memblokir thread saat ini, tetapi tidak memblokir proses unggah.
// [putTask waitUntilFinished];
// [put cancel];

C++

#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Masukkan nama bucket. Misalnya, examplebucket. */
    std::string BucketName = "examplebucket";
    /* Masukkan jalur lengkap objek. Jalur lengkap tidak boleh berisi nama bucket. Misalnya, exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

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

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
    /* Masukkan jalur lengkap file lokal. Misalnya, D:\\localpath\\examplefile.txt. Dalam contoh ini, localpath adalah direktori lokal tempat file examplefile.txt disimpan. */
    std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("D:\\localpath\\examplefile.txt", std::ios::in | std::ios::binary);
    PutObjectRequest request(BucketName, ObjectName, content);

    /* (Opsional) Contoh berikut menunjukkan cara mengatur daftar kontrol akses (ACL) ke private dan kelas penyimpanan ke Standard. */
    //request.MetaData().addHeader("x-oss-object-acl", "private");
    //request.MetaData().addHeader("x-oss-storage-class", "Standard");

    auto outcome = client.PutObject(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "PutObject gagal" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << outcome.error().Message() <<
        ",ID permintaan:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
        return 0;
}

C

#include "oss_api.h"
#include "aos_http_io.h"
/* Atur yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan jalur lengkap objek. Jalur lengkap tidak boleh berisi nama bucket. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
const char *object_content = "More than just cloud.";
/* Atur yourRegion ke ID wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    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"));
    // Konfigurasikan dua parameter berikut.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Menentukan apakah CNAME digunakan. 0 menunjukkan bahwa tidak ada CNAME yang digunakan. */
    options->config->is_cname = 0;
    /* Atur 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 titik masuk program untuk menginisialisasi sumber daya global, seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Kolam memori untuk manajemen memori setara dengan apr_pool_t. Kode implementasi ada di pustaka apr. */
    aos_pool_t *pool;
    /* Buat kolam memori. Parameter kedua adalah NULL, yang menunjukkan bahwa kolam memori tidak mewarisi dari kolam memori lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini berisi informasi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan memori ke opsi dalam kolam memori. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi opsi klien oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;
    aos_list_t buffer;
    aos_buf_t *content = NULL;
    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_list_init(&buffer);
    content = aos_buf_pack(oss_client_options->pool, object_content, strlen(object_content));
    aos_list_add_tail(&content->node, &buffer);
    /* Unggah file. */
    resp_status = oss_put_object_from_buffer(oss_client_options, &bucket, &object, &buffer, headers, &resp_headers);
    /* Periksa apakah unggah berhasil. */
    if (aos_status_is_ok(resp_status)) {
        printf("unggah objek dari buffer berhasil\n");
    } else {
        printf("unggah objek dari buffer gagal\n");      
    }
    /* Lepaskan kolam memori. Ini melepaskan memori yang dialokasikan untuk sumber daya selama permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan sumber daya global yang dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Atur titik akhir. Contoh ini menggunakan wilayah China (Hangzhou). Tentukan titik akhir untuk wilayah aktual Anda.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tentukan nama bucket. Misalnya, examplebucket.
bucket = client.get_bucket('examplebucket')
# Unggah file.
bucket.put_object('exampleobject.txt', :file => 'D:\\localpath\\examplefile.txt')

Unggah string

Unggah konten string dari memori sebagai objek.

Java

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial akses dan menginstal OSS SDK untuk Java V1.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.io.ByteArrayInputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir 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 jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. 
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";
        
        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 {
            // Tentukan string yang ingin Anda unggah. 
            String content = "Hello OSS, hello world";

            // Buat objek PutObjectRequest. 
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));

            // Kode contoh berikut memberikan contoh cara menentukan kelas penyimpanan dan daftar kontrol akses (ACL) objek saat Anda mengunggah objek: 
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);
           
            // Unggah string. 
            PutObjectResult result = ossClient.putObject(putObjectRequest);            
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}   

Python

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS Python SDK.

import argparse
import alibabacloud_oss_v2 as oss

# Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="put object sample")
# Tambahkan argumen baris perintah --region, yang 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, yang menentukan nama bucket. Argumen ini wajib diisi.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
# Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
# Tambahkan argumen baris perintah --key, yang menentukan nama objek. Argumen ini wajib diisi.
parser.add_argument('--key', help='Nama objek.', required=True)

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

    # 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 argumen endpoint diberikan, atur titik akhir dalam konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # Buat klien OSS menggunakan konfigurasi yang ditentukan.
    client = oss.Client(cfg)

    # Definisikan string yang akan diunggah.
    text_string = "Hello, OSS!"
    data = text_string.encode('utf-8')  # Enkode string menjadi string byte UTF-8.

    # Jalankan permintaan untuk mengunggah objek. Tentukan nama bucket, nama objek, dan konten data.
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
    ))

    # Cetak kode status, ID permintaan, Content-MD5, ETag, hash CRC64, dan ID versi dari hasil permintaan untuk memeriksa apakah permintaan berhasil.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # Titik masuk skrip. Fungsi main dipanggil ketika file dijalankan secara langsung.

Go

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS Go SDK.

package main

import (
	"context"
	"flag"
	"log"
	"strings"

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

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

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
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 baris perintah.
	flag.Parse()

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

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

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

	// Tentukan string yang ingin Anda unggah.
	body := strings.NewReader("hi oss")

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

	// Buat instance OSSClient.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengunggah file lokal.
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key:    oss.Ptr(objectName), // Nama objek.
		Body:   body,                // String yang ingin Anda unggah.
	}

	// Jalankan permintaan untuk mengunggah file lokal.
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengunggah objek %v", err)
	}

	// Tampilkan hasil operasi unggah objek.
	log.Printf("hasil unggah objek:%#v\n", result)
}

PHP

<?php

// Masukkan file autoload untuk memuat pustaka dependen.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

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

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

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

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

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

// Dapatkan kredensial akses dari variabel lingkungan.
// Dapatkan ID AccessKey dan rahasia AccessKey dari variabel lingkungan EnvironmentVariableCredentialsProvider.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

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

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

// Tentukan konten yang ingin Anda unggah.
$data = 'Hello OSS';

// Buat objek PutObjectRequest untuk mengunggah file lokal.
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request-> body=Oss\Utils::streamFor($data); // Tentukan bahwa badan permintaan HTTP adalah stream biner.

// Jalankan permintaan unggah sederhana.
$result = $client->putObject($request);

// Tampilkan hasil permintaan unggah sederhana.
printf(
    'kode status: %s' . PHP_EOL . // Kode status HTTP.
    'ID permintaan: %s' . PHP_EOL . // ID permintaan.
    'etag: %s' . PHP_EOL, // ETag objek.
    $result->statusCode,
    $result->requestId,
    $result->etag
);

Node.js

const OSS = require('ali-oss');

const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke 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 Anda. 
  bucket: 'yourbucketname',
});

async function putBuffer () {
  try {
    const result = await client.put('object-name', new Buffer.from('hello world'));
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

putBuffer();

.NET

using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. 
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket. Contoh: examplebucket. 
var bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. 
var objectName = "exampledir/exampleobject.txt";
// Tentukan string yang ingin Anda unggah. 
var objectContent = "More than just cloud.";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan modifikasi parameter default sesuai kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OssClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    // Unggah objek. 
    client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}

Unggah array byte

Unggah data biner dari array byte. Berguna saat Anda perlu memproses data sebelum mengunggah.

Python

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS SDK untuk Python.

import argparse
import alibabacloud_oss_v2 as oss

// Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="put object sample")
// Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
// Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
// Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
// Tambahkan argumen baris perintah --key, yang menentukan nama objek. Argumen ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)

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

    // 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 argumen endpoint disediakan, atur endpoint dalam konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    // Buat klien OSS menggunakan konfigurasi yang ditentukan.
    client = oss.Client(cfg)

    // Definisikan konten data yang akan diunggah.
    data = b'hello world'

    // Jalankan permintaan untuk mengunggah objek. Tentukan nama bucket, nama objek, dan konten data.
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
    ))

    // Cetak kode status, ID permintaan, Content-MD5, ETag, hash CRC64, dan ID versi hasil permintaan untuk memeriksa apakah permintaan berhasil.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
    )

if __name__ == "__main__":
    main()  // Titik masuk skrip. Fungsi utama dipanggil saat file dijalankan secara langsung.

Go

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS SDK untuk Go.

package main

import (
	"bytes"
	"context"
	"flag"
	"log"

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

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

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
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 baris perintah.
	flag.Parse()

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

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

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

	// Tentukan array byte yang ingin Anda unggah.
	body := bytes.NewReader([]byte("yourObjectValueByteArray"))

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

	// Buat instance OSSClient.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengunggah file lokal.
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key:    oss.Ptr(objectName), // Nama objek.
		Body:   body,                // String yang ingin Anda unggah.
	}

	// Jalankan permintaan untuk mengunggah file lokal.
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengunggah objek %v", err)
	}

	// Tampilkan hasil operasi unggah objek.
	log.Printf("hasil unggah objek:%#v\n", result)
}

Android

byte[] uploadData = new byte[100 * 1024];
new Random().nextBytes(uploadData);

// Buat permintaan unggah.
// Tentukan nama bucket (misalnya, examplebucket) dan jalur lengkap objek (misalnya, exampledir/exampleobject.txt).
// Jalur lengkap objek tidak boleh berisi nama bucket.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", uploadData);

try {
    PutObjectResult putResult = oss.putObject(put);

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // Pengecualian klien, seperti pengecualian jaringan.
    e.printStackTrace();
} catch (ServiceException e) {
    // Pengecualian server.
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

Unggah stream file

Baca data dari file lokal atau memori dan unggah menggunakan stream file.

Java

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial akses dan menginstal OSS SDK untuk Java V1.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.FileInputStream;
import java.io.InputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir 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 jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. 
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt. 
        // Jika Anda tidak menentukan jalur file lokal, file lokal diunggah dari jalur proyek tempat program contoh berada. 
        String filePath= "D:\\localpath\\examplefile.txt";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";
        
        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 {
            InputStream inputStream = new FileInputStream(filePath);
            // Buat objek PutObjectRequest. 
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // Buat permintaan PutObject. 
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
} 

Node.js

const OSS = require('ali-oss');
const fs = require('fs');
const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur region ke oss-cn-hangzhou.
  region: 'yourRegion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Tentukan nama bucket, misalnya examplebucket.
  bucket: 'examplebucket',
});

async function putStream () {
  try {
    // Secara default, SDK menggunakan encoding chunked dan mengirim permintaan HTTP PUT saat Anda memanggil operasi putStream.
    // Tentukan jalur lengkap file sumber lokal.
    // Jika Anda menghilangkan jalur lokal, file diunggah dari direktori skrip.
    let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
    // Tentukan jalur lengkap objek, misalnya 'exampledir/exampleobject.txt'. Jalur lengkap tidak boleh berisi nama bucket.
    let result = await client.putStream('exampledir/exampleobject.txt', stream);    

    // Untuk menonaktifkan encoding chunked, tentukan parameter contentLength dalam opsi.
    // let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
    // let size = fs.statSync('D:\\localpath\\examplefile.txt').size;
    // let result = await client.putStream(
    // Parameter stream dapat berupa objek Readable Stream apa pun, seperti stream file atau stream jaringan.
    // 'exampledir/exampleobject.txt', stream, {contentLength: size}); 
    console.log(result); 
  } catch (e) {
    console.log(e)
  }
}

putStream();

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Contoh ini menggunakan titik akhir Tiongkok (Hangzhou). Ganti dengan titik akhir untuk wilayah Anda.  
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, konfigurasikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# Tentukan nama bucket. Misalnya, examplebucket.
bucket = client.get_bucket('examplebucket')
# Tentukan path lengkap objek. Jangan sertakan nama bucket dalam path lengkap. Misalnya, exampleobject.txt.
bucket.put_object('exampleobject.txt') do |stream|
  100.times { |i| stream << i.to_s }
end

Unggah stream jaringan

Streaming data dari sumber jaringan langsung ke OSS tanpa menyimpannya secara lokal.

Java

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial akses dan menginstal OSS SDK untuk Java V1.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import java.io.InputStream;
import java.net.URL;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir 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 jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. 
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan URL stream jaringan. 
        String url = "https://www.aliyun.com/";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";
        
        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 {
            InputStream inputStream = new URL(url).openStream();
            // Buat objek PutObjectRequest. 
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // Buat permintaan PutObject. 
            PutObjectResult result = ossClient.putObject(putObjectRequest);            
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}             

Python

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS SDK untuk Python.

import argparse
import requests
import alibabacloud_oss_v2 as oss

// Buat parser argumen baris perintah.
parser = argparse.ArgumentParser(description="put object sample")
// Tambahkan argumen baris perintah --region, yang menentukan wilayah tempat bucket berada. Argumen ini wajib.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
// Tambahkan argumen baris perintah --bucket, yang menentukan nama bucket. Argumen ini wajib.
parser.add_argument('--bucket', help='Nama bucket.', required=True)
// Tambahkan argumen baris perintah --endpoint, yang menentukan nama domain yang dapat digunakan layanan lain untuk mengakses OSS. Argumen ini opsional.
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
// Tambahkan argumen baris perintah --key, yang menentukan nama objek. Argumen ini wajib.
parser.add_argument('--key', help='Nama objek.', required=True)

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

    // 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 argumen endpoint disediakan, atur endpoint dalam konfigurasi.
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    // Buat klien OSS menggunakan konfigurasi yang ditentukan.
    client = oss.Client(cfg)

    // Kirim permintaan HTTP GET untuk mendapatkan konten respons.
    response = requests.get('http://www.aliyun.com')

    // Jalankan permintaan untuk mengunggah objek. Tentukan nama bucket, nama objek, dan konten data.
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=response.content,
    ))

    // Cetak kode status, ID permintaan, Content-MD5, ETag, hash CRC64, dan ID versi hasil permintaan untuk memeriksa apakah permintaan berhasil.
    print(f'kode status: {result.status_code},'
          f' ID permintaan: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' ID versi: {result.version_id},'
    )

if __name__ == "__main__":
    main()  // Titik masuk skrip. Fungsi utama dipanggil saat file dijalankan secara langsung.

Go

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS SDK untuk Go.

package main

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

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

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

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
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 baris perintah.
	flag.Parse()

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

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

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

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

	// Buat instance OSSClient.
	client := oss.NewClient(cfg)

	// Tentukan stream jaringan yang ingin Anda unggah.
	resp, err := http.Get("https://www.aliyun.com/")
	if err != nil {
		log.Fatalf("Gagal mengambil URL: %v", err)
	}
	defer resp.Body.Close()

	// Buat permintaan untuk mengunggah file lokal.
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key: oss.Ptr(objectName),        // Nama objek.
		Body:   io.Reader(resp.Body), // Stream jaringan yang ingin Anda unggah.
	}

	// Jalankan permintaan untuk mengunggah file lokal.
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengunggah objek %v", err)
	}

	// Tampilkan hasil operasi unggah objek.
	log.Printf("hasil unggah objek:%#v\n", result)
}

Node.js

const OSS = require("ali-oss");
const fs = require("fs");
const urllib = require("urllib"); 

const client = new OSS({  
  // Tentukan wilayah tempat bucket berada. Misalnya, untuk China (Hangzhou), atur region ke oss-cn-hangzhou.
  region: 'yourRegion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Tentukan nama bucket, misalnya examplebucket.
  bucket: 'examplebucket',
});

// Tentukan URL stream jaringan.
const url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20220908/cbgh/image_processing_example.jpg";
// Impor stream Duplex.
// Parameter stream dapat berupa objek Readable Stream apa pun, seperti stream file atau stream jaringan.
const Duplex = require("stream").Duplex;
// Instansiasi stream Duplex.
let stream = new Duplex();

urllib.request(url, (err, data, res) => {
  if (!err) {
    // Dorong data ke stream Duplex.
    stream.push(data);
    stream.push(null);

    client
      // Tentukan jalur lengkap objek, misalnya 'example.png'. Jalur lengkap tidak boleh berisi nama bucket.
      .putStream("example.png", stream)
      .then((r) => console.log(r))
      .catch((e) => console.log(e));
  }
});

PHP

<?php

// Masukkan file autoload untuk memuat pustaka dependen.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

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

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

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

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

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

// Dapatkan kredensial akses dari variabel lingkungan.
// Dapatkan ID AccessKey dan rahasia AccessKey dari variabel lingkungan EnvironmentVariableCredentialsProvider.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

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

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

// Kueri konten file jaringan.
$url = 'https://www.aliyun.com/';
$response = file_get_contents($url);

// Buat objek PutObjectRequest untuk mengunggah file lokal.
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request->body = Oss\Utils::streamFor($response); // Tentukan bahwa badan permintaan HTTP adalah stream biner.

// Jalankan permintaan unggah sederhana.
$result = $client->putObject($request);

// Tampilkan hasil permintaan unggah sederhana.
printf(
    'kode status: %s' . PHP_EOL . // Kode status HTTP.
    'ID permintaan: %s' . PHP_EOL . // ID permintaan.
    'etag: %s' . PHP_EOL, // ETag objek.
    $result->statusCode,
    $result->requestId,
    $result->etag
);

Progress bar unggah

Lacak progres unggah secara real-time.

Java

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial akses dan menginstal OSS SDK untuk Java V1.

Progress bar unggah Java.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.event.ProgressEvent;
import com.aliyun.oss.event.ProgressEventType;
import com.aliyun.oss.event.ProgressListener;
import com.aliyun.oss.model.PutObjectRequest;
import java.io.File;

// Gunakan metode ProgressListener untuk menggunakan progress bar.
public class PutObjectProgressListenerDemo implements ProgressListener {
    private long bytesWritten = 0;
    private long totalBytes = -1;
    private boolean succeed = false;

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. Tentukan titik akhir 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 jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir\exampleobject.txt. 
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan jalur lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. 
        String pathName = "D:\\localpath\\examplefile.txt";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient. 
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 {
            // Tentukan parameter progress bar saat Anda mengunggah objek. Dalam contoh ini, PutObjectProgressListenerDemo menentukan nama kelas yang ingin Anda panggil. Ganti dengan nama kelas aktual. 
            ossClient.putObject(new PutObjectRequest(bucketName,objectName, new File(pathName)).
                    <PutObjectRequest>withProgressListener(new PutObjectProgressListenerDemo()));
            // Tentukan parameter progress bar saat Anda mengunduh objek. Dalam contoh ini, GetObjectProgressListenerDemo menentukan nama kelas yang ingin Anda panggil. Ganti dengan nama kelas aktual. 
//            ossClient.getObject(new GetObjectRequest(bucketName,objectName).
//                    <GetObjectRequest>withProgressListener(new GetObjectProgressListenerDemo()));

        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }

    public boolean isSucceed() {
        return succeed;
    }

    // Timpa metode callback untuk menggunakan progress bar. Kode contoh berikut memberikan contoh: 
    @Override
    public void progressChanged(ProgressEvent progressEvent) {
        long bytes = progressEvent.getBytes();
        ProgressEventType eventType = progressEvent.getEventType();
        switch (eventType) {
            case TRANSFER_STARTED_EVENT:
                System.out.println("Mulai mengunggah......");
                break;
            case REQUEST_CONTENT_LENGTH_EVENT:
                this.totalBytes = bytes;
                System.out.println(this.totalBytes + " byte secara total akan diunggah ke OSS");
                break;
            case REQUEST_BYTE_TRANSFER_EVENT:
                this.bytesWritten += bytes;
                if (this.totalBytes != -1) {
                    int percent = (int)(this.bytesWritten * 100.0 / this.totalBytes);
                    System.out.println(bytes + " byte telah ditulis saat ini, progres unggah: " + percent + "%(" + this.bytesWritten + "/" + this.totalBytes + ")");
                } else {
                    System.out.println(bytes + " byte telah ditulis saat ini, rasio unggah: tidak diketahui" + "(" + this.bytesWritten + "/...)");
                }
                break;
            case TRANSFER_COMPLETED_EVENT:
                this.succeed = true;
                System.out.println("Berhasil mengunggah, " + this.bytesWritten + " byte telah ditransfer secara total");
                break;
            case TRANSFER_FAILED_EVENT:
                System.out.println("Gagal mengunggah, " + this.bytesWritten + " byte telah ditransfer");
                break;
            default:
                break;
        }
    }
}

Go

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS SDK untuk Go.

package main

import (
	"context"
	"flag"
	"fmt"
	"log"

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

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

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
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 baris perintah.
	flag.Parse()

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

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

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

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

	// Buat instance OSSClient.
	client := oss.NewClient(cfg)

	// Tentukan jalur file lokal yang ingin Anda unggah. Contoh: /Users/localpath/exampleobject.txt.
	localFile := "/Users/localpath/exampleobject.txt"

	// Buat permintaan untuk mengunggah file lokal.
	putRequest := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName), // Nama bucket.
		Key:    oss.Ptr(objectName), // Nama objek.
		ProgressFn: func(increment, transferred, total int64) {
			fmt.Printf("increment:%v, transferred:%v, total:%v\n", increment, transferred, total)
		}, // Tentukan fungsi callback progres yang digunakan untuk menanyakan progres unggah.
	}

	// Jalankan permintaan untuk mengunggah file lokal.
	result, err := client.PutObjectFromFile(context.TODO(), putRequest, localFile)
	if err != nil {
		log.Fatalf("gagal mengunggah objek dari file %v", err)
	}

	// Tampilkan hasil operasi unggah objek.
	log.Printf("hasil unggah objek dari file:%#v\n", result)
}

PHP

<?php

// Masukkan file autoload untuk memuat pustaka dependen.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

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

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

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

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

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

// Dapatkan kredensial akses dari variabel EnvironmentVariableCredentialsProvider.
// Pastikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET telah dikonfigurasi dengan benar.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// Muat konfigurasi default SDK.
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // Tentukan penyedia kredensial.
$cfg->setRegion($region); // Tentukan wilayah tempat bucket berada.

// Jika parameter endpoint disediakan, tentukan nama domain kustom.
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

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

// Tentukan konten data yang ingin Anda unggah.
$data = 'Hello OSS';

// Buat permintaan PutObjectRequest dan tentukan nama bucket dan nama objek dalam permintaan.
$request = new Oss\Models\PutObjectRequest($bucket, $key);

// Konversi konten data ke objek stream.
$request->body = Oss\Utils::streamFor($data);

// Tentukan fungsi callback progres unggah.
$request->progressFn = function (int $increment, int $transferred, int $total) {
    echo sprint("Diunggah:%d" . PHP_EOL, $transferred); // Jumlah byte yang diunggah.
    echo sprint("Unggah ini:%d" . PHP_EOL, $increment); // Jumlah byte inkremental yang diunggah.
    echo sprint("Total data:%d" . PHP_EOL, $total); // Ukuran total objek.
    echo '-------------------------------------------'. PHP_EOL; // Pembatas garis putus-putus.
};

// Gunakan metode putObject untuk mengunggah file lokal.
$result = $client->putObject($request);

// Tampilkan hasil permintaan unggah sederhana.
printf(
    'kode status: %s' . PHP_EOL, $result->statusCode . // Kode status HTTP yang dikembalikan.
    'ID permintaan: %s' . PHP_EOL, $result->requestId . // ID permintaan.
    'etag: %s' . PHP_EOL, $result->etag // ETag objek.
);

.NET

using System;
using System.IO;
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
namespace PutObjectProgress
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.PutObjectProgress();
            Console.ReadKey();
        }
        public static void PutObjectProgress()
        {
            // Tentukan titik akhir wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. 
            var endpoint = "yourEndpoint";
            // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. 
            var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
            var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
            // Tentukan nama bucket. 
            var bucketName = "yourBucketName";
            // Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. 
            var objectName = "yourObjectName";
            // Tentukan jalur lengkap file lokal untuk diunggah. Dalam contoh ini, jalur diatur ke D:\\localpath\\examplefile.txt. File bernama examplefile.txt disimpan di direktori D:\\localpath. 
            var localFilename = "yourLocalFilename";
            // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
            const string region = "cn-hangzhou";
            // Buat instance ClientConfiguration dan modifikasi parameter default sesuai kebutuhan Anda.
            var conf = new ClientConfiguration();
            // Gunakan algoritma tanda tangan V4.
            conf.SignatureVersion = SignatureVersion.V4;
            
            // Buat instance OssClient.
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
            client.SetRegion(region);
            // Unggah objek dengan progress bar yang ditampilkan. 
            try
            {
                using (var fs = File.Open(localFilename, FileMode.Open))
                {
                    var putObjectRequest = new PutObjectRequest(bucketName, objectName, fs);
                    putObjectRequest.StreamTransferProgress += streamProgressCallback;
                    client.PutObject(putObjectRequest);
                }
                Console.WriteLine("Put object:{0} berhasil", objectName);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nID Permintaan: {2}\tID Host: {3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
            }
        }
        // Dapatkan progres tugas unggah. 
        private static void streamProgressCallback(object sender, StreamTransferProgressArgs args)
        {
            System.Console.WriteLine("ProgressCallback - Progres: {0}%, TotalBytes:{1}, TransferredBytes:{2} ",
                args.TransferredBytes * 100 / args.TotalBytes, args.TotalBytes, args.TransferredBytes);
        }
    }
}

Android

// Buat permintaan unggah.
// Tentukan nama bucket (misalnya, examplebucket), jalur lengkap objek (misalnya, exampledir/exampleobject.txt), dan jalur lengkap file lokal (misalnya, /storage/emulated/0/oss/examplefile.txt).
// Jangan sertakan nama bucket dalam jalur lengkap objek.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

// Atur fungsi callback progres untuk menampilkan progress bar.
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
    @Override
    public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
        // currentSize adalah ukuran bagian yang diunggah. Satuan: byte.
        // totalSize adalah ukuran total file yang akan diunggah. Satuan: byte.
        Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});

// Unggah file secara asinkron.
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
    @Override
    public void onSuccess(PutObjectRequest request, PutObjectResult result) {
        Log.d("PutObject", "UploadSuccess");
        Log.d("ETag", result.getETag());
        Log.d("RequestId", result.getRequestId());
    }

    @Override
    public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // Pengecualian permintaan.
        if (clientExcepion != null) {
            // Pengecualian klien, seperti pengecualian jaringan.
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // Pengecualian layanan.
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});
// task.cancel(); // Membatalkan tugas.
// task.waitUntilFinished(); // Menunggu tugas selesai.

C++

#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;

void ProgressCallback(size_t increment, int64_t transfered, int64_t total, void* userData)
{
    // increment: ukuran data yang dikirim dalam callback ini.
    // transfered: ukuran data yang telah diunggah.
    // total: ukuran total file yang akan diunggah.
    std::cout << "ProgressCallback[" << userData << "] => " <<
    increment <<" ," << transfered << "," << total << std::endl;
}


int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Region ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan jalur lengkap objek. Jalur lengkap tidak boleh berisi nama bucket. Contoh: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

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

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
  
    /* Atur yourLocalFilename ke jalur lengkap file lokal. */
    std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("yourLocalFilename", std::ios::in|std::ios::binary);
    PutObjectRequest request(BucketName, ObjectName, content);
  
    TransferProgress progressCallback = { ProgressCallback , nullptr };
    request.setTransferProgress(progressCallback);
   
    /* Unggah file. */
    auto outcome = client.PutObject(request);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "PutObject gagal" <<
        ",kode:" << outcome.error().Code() <<
        ",pesan:" << outcome.error().Message() <<
        ",ID permintaan:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

iOS

OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// Tentukan nama bucket. Contoh: examplebucket. 
put.bucketName = @"examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. 
put.objectKey = @"exampledir/exampleobject.txt";
// Tentukan jalur lengkap file lokal yang ingin Anda unggah. 
// Secara default, jika Anda tidak menentukan jalur lengkap file lokal, file lokal diunggah dari jalur proyek tempat program contoh berada. 
put.uploadingFileURL = [NSURL fileURLWithPath:@"filePath"];
// Konfigurasikan fungsi callback progres untuk menampilkan progress bar. 
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    // Tentukan jumlah byte yang sedang diunggah, jumlah total byte yang diunggah, dan jumlah total byte yang ingin Anda unggah. 
    NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"upload object success!");
    } else {
        NSLog(@"upload object failed, error: %@" , task.error);
    }
    return nil;
}];
// Implementasikan pemblokiran sinkron untuk menunggu tugas selesai. 
// [putTask waitUntilFinished]; 

C

#include "oss_api.h"
#include "aos_http_io.h"
/* Ganti yourEndpoint dengan Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";

/* Ganti dengan nama bucket Anda, misalnya, examplebucket. */
const char *bucket_name = "examplebucket";
/* Ganti dengan jalur lengkap objek. Jalur lengkap tidak boleh berisi nama bucket. Misalnya, exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
/* Ganti dengan jalur lengkap file lokal. */
const char *local_filename = "yourLocalFilename";
/* Ganti yourRegion dengan ID wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur ID wilayah ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */    
    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"));
    // Konfigurasikan dua parameter berikut.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Tentukan apakah akan menggunakan CNAME. 0 menunjukkan bahwa CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Atur parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
void percentage(int64_t consumed_bytes, int64_t total_bytes) 
{
    assert(total_bytes >= consumed_bytes);
    printf("%%%" APR_INT64_T_FMT "\n", consumed_bytes * 100 / total_bytes);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di titik masuk program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Kolam memori (pool) digunakan untuk manajemen memori dan setara dengan apr_pool_t. Kode implementasi ada di pustaka apr. */
    aos_pool_t *pool;
    /* Buat kolam memori baru. Parameter kedua adalah NULL, yang menunjukkan bahwa kolam memori baru tidak mewarisi dari kolam memori lain. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini berisi konfigurasi global, seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan memori untuk opsi dalam kolam memori. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi opsi klien oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;   
    aos_list_t resp_body;
    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);
    /* Unggah dengan progress bar. */
    resp_status = oss_do_put_object_from_file(oss_client_options, &bucket, &object, &file, NULL, NULL, percentage, &resp_headers, &resp_body);
    if (aos_status_is_ok(resp_status)) {
        printf("unggah objek dari file berhasil\n");
    } else {
        printf("unggah objek dari file gagal\n");
    }
    /* Lepaskan kolam memori. Ini melepaskan memori yang dialokasikan untuk berbagai sumber daya selama permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan sumber daya global yang dialokasikan sebelumnya. */
    aos_http_io_deinitialize();
    return 0;
}

Callback unggah

Setelah unggah, gunakan callback untuk memberi tahu server aplikasi Anda untuk pemrosesan lebih lanjut. Callback.

Java

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial akses dan menginstal OSS Java SDK V1.

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.Callback;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;

import java.io.ByteArrayInputStream;

public class Demo {

    public static void main(String[] args) throws Exception{
        // Tentukan titik akhir wilayah. Dalam contoh ini, titik akhir wilayah China (Hangzhou) digunakan. 
        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 jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam jalur lengkap. 
        String objectName = "exampledir/exampleobject.txt";
        // Tentukan alamat server tempat permintaan callback dikirim. Contoh: https://example.com:23450. 
        String callbackUrl = "yourCallbackServerUrl";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. 
        String region = "cn-hangzhou";

        // Buat instance OSSClient. 
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat 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 {
            String content = "Hello OSS";
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName,new ByteArrayInputStream(content.getBytes()));

            // Konfigurasikan parameter callback unggah.
            Callback callback = new Callback();
            callback.setCallbackUrl(callbackUrl);
            // (Opsional) Tentukan bidang CallbackHost dalam header permintaan callback. 
            // callback.setCallbackHost("yourCallbackHost");
            
            // Atur badan permintaan callback dalam format JSON dan definisikan variabel placeholder di dalamnya. 
            callback.setCalbackBodyType(Callback.CalbackBodyType.JSON);
            callback.setCallbackBody("{\\\"bucket\\\":${bucket},\\\"object\\\":${object},\\\"mimeType\\\":${mimeType},\\\"size\\\":${size},\\\"my_var1\\\":${x:var1},\\\"my_var2\\\":${x:var2}}");

            // Konfigurasikan parameter kustom untuk permintaan callback. Setiap parameter kustom terdiri dari kunci dan nilai. Kunci harus dimulai dengan x:. 
            callback.addCallbackVar("x:var1", "value1");
            callback.addCallbackVar("x:var2", "value2");
            putObjectRequest.setCallback(callback);

            // Lakukan operasi unggah.
            PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);

            // Baca konten pesan yang dikembalikan dari callback unggah. 
            byte[] buffer = new byte[1024];
            putObjectResult.getResponse().getContent().read(buffer);
            // Anda harus menutup stream yang diperoleh setelah data dibaca. Jika tidak, kebocoran koneksi dapat terjadi. Akibatnya, tidak ada koneksi yang tersedia dan terjadi pengecualian. 
            putObjectResult.getResponse().getContent().close();
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (Throwable ce) {
            System.out.println("Terjadi ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Python

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS Python SDK.

import base64
import argparse
import alibabacloud_oss_v2 as oss

parser = argparse.ArgumentParser(description="put object sample")

// Tambahkan parameter yang diperlukan.
parser.add_argument('--region', help='Wilayah tempat bucket berada.', required=True)
parser.add_argument('--bucket', help='Nama bucket.', required=True)
parser.add_argument('--endpoint', help='Nama domain yang dapat digunakan layanan lain untuk mengakses OSS')
parser.add_argument('--key', help='Nama objek.', required=True)
parser.add_argument('--call_back_url', help='Alamat server callback.', required=True)


def main():

    args = parser.parse_args()

    // Muat kredensial dari variabel lingkungan.
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    // Konfigurasikan klien SDK.
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    // Buat klien OSS.
    client = oss.Client(cfg)

    // Konten yang akan diunggah (string).
    data = 'hello world'

    // Bangun parameter callback (callback): Tentukan alamat webhook dan badan permintaan callback, dan gunakan encoding Base64.
    callback=base64.b64encode(str('{\"callbackUrl\":\"' + args.call_back_url + '\",\"callbackBody\":\"bucket=${bucket}&object=${object}&my_var_1=${x:var1}&my_var_2=${x:var2}\"}').encode()).decode()
    // Bangun variabel kustom (callback-var) dan gunakan encoding Base64.
    callback_var=base64.b64encode('{\"x:var1\":\"value1\",\"x:var2\":\"value2\"}'.encode()).decode()

    // Mulai permintaan unggah yang mencakup parameter callback.
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
        callback=callback,
        callback_var=callback_var,
    ))
    // Cetak hasil yang dikembalikan, termasuk kode status dan ID permintaan.
    print(vars(result))


if __name__ == "__main__":
    main()

Go

Sebelum memulai, pastikan Anda telah mengonfigurasi kredensial dan menginstal OSS Go SDK.

package main

import (
	"context"
	"encoding/base64"
	"encoding/json"
	"flag"
	"log"
	"strings"

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

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

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
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 baris perintah.
	flag.Parse()

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

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

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

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

	// Buat instance OSSClient.
	client := oss.NewClient(cfg)

	// Tentukan parameter callback.
	callbackMap := map[string]string{
		"callbackUrl":      "http://example.com:23450",                                                        // Tentukan URL server callback. Contoh: https://example.com:23450.
		"callbackBody":     "bucket=${bucket}&object=${object}&size=${size}&my_var_1=${x:my_var1}&my_var_2=${x:my_var2}", // Tentukan badan permintaan callback.
		"callbackBodyType": "application/x-www-form-urlencoded",                                                          // Tentukan tipe badan permintaan callback.
	}

	// Konversi konfigurasi parameter callback ke string JSON dan encode string tersebut dalam Base64 untuk melewatkan konfigurasi callback.
	callbackStr, err := json.Marshal(callbackMap)
	if err != nil {
		log.Fatalf("gagal marshal peta callback: %v", err)
	}
	callbackBase64 := base64.StdEncoding.EncodeToString(callbackStr)

	callbackVarMap := map[string]string{}
	callbackVarMap["x:my_var1"] = "thi is var 1"
	callbackVarMap["x:my_var2"] = "thi is var 2"
	callbackVarStr, err := json.Marshal(callbackVarMap)
	if err != nil {
		log.Fatalf("gagal marshal var callback: %v", err)
	}
	callbackVarBase64 := base64.StdEncoding.EncodeToString(callbackVarStr)
	// Tentukan string yang ingin Anda unggah.
	body := strings.NewReader("Hello, OSS!") // String yang ingin Anda unggah.

	// Buat permintaan untuk mengunggah file lokal.
	request := &oss.PutObjectRequest{
		Bucket:      oss.Ptr(bucketName),        // Nama bucket.
		Key:         oss.Ptr(objectName),        // Nama objek.
		Body:        body,                       // Konten objek.
		Callback:    oss.Ptr(callbackBase64),    // Parameter callback.
		CallbackVar: oss.Ptr(callbackVarBase64),
	}

	// Jalankan permintaan untuk mengunggah file lokal.
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengunggah objek %v", err)
	}

	// Tampilkan hasil operasi unggah objek.
	log.Printf("hasil unggah objek:%#v\n", result)
}

PHP

<?php

// Masukkan file autoload untuk memuat pustaka dependen.
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

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

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

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

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

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

// Dapatkan kredensial akses dari variabel lingkungan.
// Dapatkan ID AccessKey dan rahasia AccessKey dari variabel lingkungan EnvironmentVariableCredentialsProvider.
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

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

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

// Tentukan informasi tentang server callback.
// Tentukan URL callback, yaitu alamat server yang menerima permintaan callback.
// Tentukan host callback, yaitu hostname server callback.
// Tentukan badan callback, yaitu templat yang digunakan untuk menentukan konten callback. Placeholder dinamis didukung.
// Tentukan tipe badan callback, yaitu format konten callback.
$callback = base64_encode(json_encode(array(
    'callbackUrl' => yourCallbackServerUrl, // Ganti yourCallbackServerUrl dengan URL server callback aktual.
    'callbackHost' => 'CallbackHost', // Ganti CallbackHost dengan hostname server callback aktual.
    'callbackBody' => 'bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&my_var1=${x:var1}&my_var2=${x:var2}',
    'callbackBodyType' => "application/x-www-form-urlencoded", // Tentukan format konten callback.
)));

// Tentukan variabel kustom untuk melewatkan informasi tambahan dalam callback.
$callbackVar = base64_encode(json_encode(array(
    'x:var1' => "value1", // Tentukan variabel kustom pertama.
    'x:var2' => 'value2', // Tentukan variabel kustom kedua.
)));

// Buat objek PutObjectRequest untuk mengunggah file lokal.
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request->callback = $callback; // Tentukan informasi callback.
$request->callbackVar = $callbackVar; // Tentukan variabel kustom.

// Jalankan permintaan unggah sederhana.
$result = $client->putObject($request);

// Tampilkan hasil permintaan unggah sederhana.
// Tampilkan kode status HTTP, ID permintaan, dan hasil callback untuk memeriksa apakah permintaan berhasil.
printf(
    'kode status:' . $result->statusCode . PHP_EOL . // Kode status HTTP. Misalnya, kode status HTTP 200 menunjukkan bahwa permintaan berhasil.
    'ID permintaan:' . $result-> requestId. PHP_EOL // ID permintaan, yang digunakan untuk debugging atau melacak permintaan.
    'hasil callback:' . var_export($result->callbackResult, true) . PHP_EOL // Detail hasil callback.
);

.NET

using System;
using System.IO;
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
namespace Callback
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.PutObjectCallback();
            Console.ReadKey();
        }
        public static void PutObjectCallback()
        {
            // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
            var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
            var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
            // Tentukan nama bucket, seperti examplebucket.
            var bucketName = "examplebucket";
            // Tentukan jalur lengkap objek, seperti exampledir/exampleobject.txt. Jalur lengkap tidak boleh berisi nama bucket.
            var objectName = "exampledir/exampleobject.txt";
           // Tentukan jalur lengkap file lokal, seperti D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan jalur lokal, file diunggah dari jalur default proyek.
            var localFilename = "D:\\localpath\\examplefile.txt";
            // Atur URL server callback, seperti https://example.com:23450.
            const string callbackUrl = "yourCallbackServerUrl";
            // Atur nilai badan permintaan untuk callback.
            const string callbackBody = "bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&" +
                                        "my_var1=${x:var1}&my_var2=${x:var2}";
            //  Tentukan Endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
            const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
            const string region = "cn-hangzhou";
            // Buat instance ClientConfiguration dan modifikasi parameter default sesuai kebutuhan.
            var conf = new ClientConfiguration();
            // Atur versi tanda tangan ke V4.
            conf.SignatureVersion = SignatureVersion.V4;

            // Buat instance OssClient.
            var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
            client.SetRegion(region);
            try
            {
                string responseContent = "";
                var metadata = BuildCallbackMetadata(callbackUrl, callbackBody);
                using (var fs = File.Open(localFilename, FileMode.Open))
                {
                    var putObjectRequest = new PutObjectRequest(bucketName, objectName, fs, metadata);
                    var result = client.PutObject(putObjectRequest);
                    responseContent = GetCallbackResponse(result);
                }
                Console.WriteLine("Put object:{0} berhasil, konten respons callback:{1}", objectName, responseContent);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Gagal dengan kode kesalahan: {0}; Info kesalahan: {1}. \nID Permintaan: {2}\tID Host: {3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Gagal dengan info kesalahan: {0}", ex.Message);
            }
        }
        // Konfigurasikan callback unggah.
        private static ObjectMetadata BuildCallbackMetadata(string callbackUrl, string callbackBody)
        {
            string callbackHeaderBuilder = new CallbackHeaderBuilder(callbackUrl, callbackBody).Build();
            string CallbackVariableHeaderBuilder = new CallbackVariableHeaderBuilder().
                AddCallbackVariable("x:var1", "x:value1").AddCallbackVariable("x:var2", "x:value2").Build();
            var metadata = new ObjectMetadata();
            metadata.AddHeader(HttpHeaders.Callback, callbackHeaderBuilder);
            metadata.AddHeader(HttpHeaders.CallbackVar, CallbackVariableHeaderBuilder);
            return metadata;
        }
        // Baca pesan yang dikembalikan dari callback unggah.
        private static string GetCallbackResponse(PutObjectResult putObjectResult)
        {
            string callbackResponse = null;
            using (var stream = putObjectResult.ResponseStream)
            {
                var buffer = new byte[4 * 1024];
                var bytesRead = stream.Read(buffer, 0, buffer.Length);
                callbackResponse = Encoding.Default.GetString(buffer, 0, bytesRead);
            }
            return callbackResponse;
        }
    }
}

Node.js

const OSS = require("ali-oss");

var path = require("path");

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

const options = {
  callback: {
    // Tentukan alamat server callback yang menerima permintaan callback. Contoh: http://oss-demo.aliyuncs.com:23450. 
    url: "http://oss-demo.aliyuncs.com:23450",
    // (Opsional) Tentukan bidang Host yang disertakan dalam header permintaan callback. 
    //host: 'yourCallbackHost',
    // Tentukan badan permintaan callback. 
    body: "bucket=${bucket}&object=${object}&var1=${x:var1}&var2=${x:var2}",
    // Tentukan Content-Type dalam permintaan callback. 
    contentType: "application/x-www-form-urlencoded",
    // Menentukan apakah OSS mengirim Server Name Indication (SNI) ke alamat asal yang ditentukan oleh callbackUrl saat permintaan callback dimulai dari klien.
    callbackSNI: true,
    // Konfigurasikan parameter kustom untuk permintaan callback. 
    customValue: {
      var1: "value1",
      var2: "value2",
    },
  },
};

async function put() {
  try {
    // Tentukan jalur lengkap objek dan file lokal. Jangan sertakan nama bucket dalam jalur lengkap objek. 
    // Secara default, jika Anda tidak menentukan jalur file lokal, file diunggah dari jalur lokal proyek tempat program contoh berada. 
    let result = await client.put(
      "exampleobject.txt",
      path.normalize("/localpath/examplefile.txt"),
      options
    );
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Wilayah Tiongkok (Hangzhou) digunakan sebagai contoh untuk titik akhir. Tentukan titik akhir berdasarkan wilayah Anda.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
    # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah disetel.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# Tentukan nama bucket, misalnya, examplebucket.
bucket = client.get_bucket('examplebucket')

callback = Aliyun::OSS::Callback.new(
  url: 'http://oss-demo.aliyuncs.com:23450',
  query: {user: 'put_object'},
  body: 'bucket=${bucket}&object=${object}'
)

begin
  bucket.put_object('files/hello', file: '/tmp/x', callback: callback)
rescue Aliyun::OSS::CallbackError => e
  puts "Callback gagal: #{e.message}"
end

Browser.js

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

  <body>
    <button id="submit">Upload Callback</button>
    <!--Impor file SDK-->
    <script
      type="text/javascript"
      src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.16.0.min.js"
    ></script>
    <script type="text/javascript">
      const client = new OSS({
        // Atur yourRegion ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur yourRegion ke oss-cn-hangzhou.
        region: "yourRegion",
        authorizationV4: true,
        // Pasangan AccessKey sementara (ID AccessKey dan rahasia AccessKey) yang diperoleh dari Security Token Service (STS).
        accessKeyId: "yourAccessKeyId",
        accessKeySecret: "yourAccessKeySecret",
        // Token keamanan (SecurityToken) yang diperoleh dari layanan STS.
        stsToken: "yourSecurityToken",
        // Tentukan nama bucket. Misalnya, examplebucket.
        bucket: "examplebucket",
      });

      const options = {
        callback: {
          // Alamat server untuk permintaan callback. Alamat harus berupa URL Internet.
          url: "http://examplebucket.aliyuncs.com:23450",
          // Nilai Host dalam header permintaan callback. Ini adalah nilai Host yang dikonfigurasi di server Anda.
          // host: 'yourHost',
          // Nilai badan permintaan untuk callback.
          body: "bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&var1=${x:var1}&var2=${x:var2}",
          // Content-Type permintaan callback.
          // contentType: 'application/x-www-form-urlencoded',
          // Menentukan apakah OSS mengirim Server Name Indication (SNI) ke URL asal yang ditentukan oleh callbackUrl saat klien memulai permintaan callback.
          callbackSNI: true,
          // Parameter kustom untuk permintaan callback.
          customValue: {
            var1: "value1",
            var2: "value2",
          },
        },
      };
      // Dapatkan DOM.
      const submit = document.getElementById("submit");
      // Unggah callback.
      submit.addEventListener("click", () => {
        client
          .put("example.txt", new Blob(["Hello World"]), options)
          .then((r) => console.log(r));
      });
    </script>
  </body>
</html>

Android

// Buat permintaan unggah.
// Tentukan nama bucket, jalur lengkap objek, dan jalur lengkap file lokal. Misalnya, examplebucket, exampledir/exampleobject.txt, dan /storage/emulated/0/oss/examplefile.txt.
// Jalur lengkap objek tidak boleh berisi nama bucket.
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

put.setCallbackParam(new HashMap<String, String>() {
    {
        put("callbackUrl", "http://oss-demo.aliyuncs.com:23450");
        put("callbackHost", "yourCallbackHost");
        put("callbackBodyType", "application/json");
        put("callbackBody", "{\"mimeType\":${mimeType},\"size\":${size}}");
    }
});

OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
    @Override
    public void onSuccess(PutObjectRequest request, PutObjectResult result) {
        Log.d("PutObject", "UploadSuccess");

        // Nilai ini berisi data hanya jika servercallback diatur.
        String serverCallbackReturnJson = result.getServerCallbackReturnBody();

        Log.d("servercallback", serverCallbackReturnJson);
    }

    @Override
    public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // Tangani pengecualian.
    }
});
        

C++

#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi akun OSS. */
            
    /* Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket, misalnya examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan jalur lengkap objek. Jalur lengkap tidak boleh menyertakan nama bucket. Misalnya, exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";
    /* Tentukan URL server callback Anda. */
    std::string ServerName = "https://example.aliyundoc.com:23450";

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

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "Thank you for using Alibaba Cloud Object Storage Service!";

    /* Atur parameter callback unggah. */
    std::string callbackBody = "bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&my_var1=${x:var1}";
    ObjectCallbackBuilder builder(ServerName, callbackBody, "", ObjectCallbackBuilder::Type::URL);
    std::string value = builder.build();
    ObjectCallbackVariableBuilder varBuilder;
    varBuilder.addCallbackVariable("x:var1", "value1");
    std::string varValue = varBuilder.build();
    PutObjectRequest request(BucketName, ObjectName, content);
    request.MetaData().addHeader("x-oss-callback", value);
    request.MetaData().addHeader("x-oss-callback-var", varValue);
    auto outcome = client.PutObject(request);

    /* Lepaskan sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}

iOS

OSSPutObjectRequest * request = [OSSPutObjectRequest new];
// Tentukan nama bucket. Contoh: examplebucket. 
request.bucketName = @"examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. 
request.objectKey = @"exampledir/exampleobject.txt";
request.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
// Konfigurasikan parameter callback.
request.callbackParam = @{
                          @"callbackUrl": @"<alamat callback server Anda>",
                          @"callbackBody": @"<badan callback Anda>"
                          };
// Tentukan variabel kustom. 
request.callbackVar = @{
                        @"<var1>": @"<value1>",
                        @"<var2>": @"<value2>"
                        };
request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * task = [client putObject:request];
[task continueWithBlock:^id(OSSTask *task) {
    if (task.error) {
        OSSLogError(@"%@", task.error);
    } else {
        OSSPutObjectResult * result = task.result;
        NSLog(@"Hasil - requestId: %@, headerFields: %@, servercallback: %@",
              result.requestId,
              result.httpResponseHeaderFields,
              result.serverReturnJsonString);
    }
    return nil;
}];
// Implementasikan pemblokiran sinkron untuk menunggu tugas selesai. 
// [task waitUntilFinished]; 

C

#include "oss_api.h"
#include "aos_http_io.h"
/* Atur yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";

/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan jalur lengkap objek. Jalur lengkap tidak boleh menyertakan nama bucket. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
const char *object_content = "More than just cloud.";
/* Atur yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Inisialisasi tipe aos_string_t dengan string char*. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */    
    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"));
    // Konfigurasikan dua parameter berikut.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Menentukan apakah nama kanonik (CNAME) digunakan. Nilai 0 menunjukkan bahwa tidak ada CNAME yang digunakan. */
    options->config->is_cname = 0;
    /* Atur parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    aos_pool_t *p = NULL;
    aos_status_t *s = NULL;
    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *headers = NULL;
    oss_request_options_t *options = NULL;
    aos_table_t *resp_headers = NULL;
    aos_list_t resp_body;
    aos_list_t buffer;
    aos_buf_t *content;
    char *buf = NULL;
    int64_t len = 0;
    int64_t size = 0;
    int64_t pos = 0;
    char b64_buf[1024];
    int b64_len;
    /* Gunakan format JSON. */
    /* (Opsional) Atur nilai Host dalam header pesan permintaan callback, seperti nilai Host yang dikonfigurasi di server Anda. */
    char *callback =  "{"
        "\"callbackUrl\":\"http://oss-demo.aliyuncs.com:23450\","
         "\"callbackHost\":\"yourCallbackHost\","
        "\"callbackBody\":\"bucket=${bucket}&object=${object}&size=${size}&mimeType=${mimeType}\","
        "\"callbackBodyType\":\"application/x-www-form-urlencoded\""
        "}";
    /* Panggil metode aos_http_io_initialize di titik masuk program untuk menginisialisasi sumber daya global seperti jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Inisialisasi parameter. */
    aos_pool_create(&p, NULL);
    options = oss_request_options_create(p);
    init_options(options);
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_list_init(&resp_body);
    aos_list_init(&buffer);
    content = aos_buf_pack(options->pool, object_content, strlen(object_content));
    aos_list_add_tail(&content->node, &buffer);
    /* Tambahkan callback ke header. */
    b64_len = aos_base64_encode((unsigned char*)callback, strlen(callback), b64_buf);
    b64_buf[b64_len] = '\0';
    headers = aos_table_make(p, 1);
    apr_table_set(headers, OSS_CALLBACK, b64_buf);
    /* Unggah callback. */
    s = oss_do_put_object_from_buffer(options, &bucket, &object, &buffer,
        headers, NULL, NULL, &resp_headers, &resp_body);
    if (aos_status_is_ok(s)) {
        printf("unggah objek dari buffer berhasil\n");
    } else {
        printf("unggah objek dari buffer gagal\n");
    }
    /* Dapatkan panjang buffer. */
    len = aos_buf_list_len(&resp_body);
    buf = (char *)aos_pcalloc(p, (apr_size_t)(len + 1));
    buf[len] = '\0';
    /* Salin konten buffer ke memori. */
    aos_list_for_each_entry(aos_buf_t, content, &resp_body, node) {
        size = aos_buf_size(content);
        memcpy(buf + pos, content->pos, (size_t)size);
        pos += size;
    }
    /* Lepaskan kolam memori. Ini melepaskan memori yang dialokasikan untuk berbagai sumber daya selama permintaan. */
    aos_pool_destroy(p);
    /* Lepaskan sumber daya global yang dialokasikan sebelumnya. */
    aos_http_io_deinitialize();
    return 0;
}

ossutil CLI

Sebelum menggunakan perintah put-object, pastikan Anda telah menginstal ossutil.

Contoh

  • Unggah objek dari string.

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss"
  • Unggah objek dari file lokal.

    ossutil api put-object --bucket examplebucket --key exampleobject --body file://uploadFile
  • Unggah objek dari string dan tambahkan metadata kustom.

    ossutil api put-object --bucket examplebucket --key exampleobject  --metadata user=aliyun --metadata email=ali***@aliyuncs.com --body "hi oss"
  • Unggah objek dari string dan tentukan tag untuk objek.

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --tagging "TagA=A&TagB=B"
  • Unggah objek dari string dan tentukan ACL dan kelas penyimpanan objek.

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --object-acl private --storage-class IA
  • Unggah objek dari string dan tentukan metode enkripsi sisi server untuk objek.

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --server-side-encryption KMS --server-side-data-encryption SM4 --server-side-encryption-key-id 9468da86-3509-4f8d-a61e-6eab1eac****
  • Unggah objek dari string dan cegah objek tersebut menimpa objek yang sudah ada dengan nama yang sama.

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --forbid-overwrite true
  • Unggah objek dari string dan tentukan perilaku caching objek.

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --cache-control no-cache
  • Unggah objek dari string dan tentukan nama objek saat diunduh.

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --content-disposition "attachment;filename=oss_download.jpg"

API Terkait

Metode di atas dibangun di atas operasi API. Untuk memanggil API RESTful secara langsung, Anda harus menghitung tanda tangan secara manual. PutObject.

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

Deskripsi

PutObject

oss:PutObject

Mengunggah objek.

oss:PutObjectTagging

Diperlukan jika Anda menentukan tag objek dengan menggunakan header x-oss-tagging saat mengunggah objek.

kms:GenerateDataKey

Diperlukan jika header X-Oss-Server-Side-Encryption: KMS diatur ke KMS saat mengunggah objek.

kms:Decrypt

Penagihan

Simple upload menimbulkan biaya untuk item yang dapat ditagih berikut. Harga OSS.

API

Item yang dapat ditagih

Deskripsi

PutObject

Permintaan PUT

Anda dikenai biaya permintaan berdasarkan jumlah permintaan yang berhasil.

Biaya penyimpanan

Anda dikenai biaya penyimpanan berdasarkan kelas penyimpanan, ukuran, dan durasi penyimpanan objek.

FAQ

Unggah file besar

Simple upload mendukung file hingga 5 GB. Untuk mengunggah file yang lebih besar dari 5 GB, gunakan unggah multi-bagian.

Unggah file secara batch

  • Gunakan Konsol OSS (mendukung penyaringan file manual)

    Klik nama bucket tujuan. Klik Upload Object > Select Folders, pilih folder untuk diunggah, hapus file yang tidak diinginkan, lalu klik Upload Object.

  • Gunakan ossbrowser (tidak mendukung penyaringan file)

    Klik nama bucket tujuan. Di bagian atas halaman, klik Upload dan pilih folder untuk diunggah dari daftar drop-down.

  • Gunakan ossutil (mendukung penyaringan berdasarkan nama file)

    Gunakan perintah cp ossutil dengan opsi -r (--recursive) untuk mengunggah file secara batch. Gunakan --include dan --exclude untuk menyaring berdasarkan nama file. cp (unggah file).

    • Unggah file dari folder lokal localfolder ke folder desfolder di bucket examplebucket.

      ossutil cp -r D:/localpath/localfolder/ oss://examplebucket/desfolder/
    • Unggah file yang memenuhi kondisi tertentu secara batch.

      Misalnya, perintah berikut mengunggah semua file TXT.

      ossutil cp -r D:/localpath/localfolder/ oss://examplebucket/desfolder/ --include "*.txt"
  • Dekompresi paket ZIP

    Gunakan dekompresi ZIP untuk mengunggah file secara batch: konfigurasikan aturan dekompresi, unggah file ZIP ke OSS, dan Function Compute akan mendekompresinya secara otomatis. Unggah dan dekompresi otomatis paket ZIP.

Akses sementara untuk pihak ketiga

OSS menyediakan dua metode untuk akses sementara pihak ketiga:

Proses file yang diunggah

  • Pemrosesan gambar: Kompres, gayakan, atau analisis gambar yang diunggah. Pemrosesan gambar.

  • ApsaraVideo Media Processing: Proses file media yang diunggah — pengenalan teks, ekstraksi subtitle, transkoding, dan pembuatan gambar mini. ApsaraVideo Media Processing.

Gunakan nama domain kustom

Saat menggunakan SDK, tentukan nama domain kustom saat membuat OssClient. Atur parameter cname ke true dalam konfigurasi setiap bahasa. Gunakan nama domain kustom untuk mengakses OSS.

Cegah penimpaan tidak disengaja

Secara default, simple upload akan menimpa objek dengan nama yang sama. Gunakan salah satu metode berikut untuk mencegah penimpaan tidak disengaja.

  • Aktifkan versioning

    Dengan versioning diaktifkan, objek yang ditimpa disimpan sebagai versi sebelumnya yang dapat Anda pulihkan kapan saja. Ikhtisar versioning.

  • Gunakan parameter permintaan untuk mencegah penimpaan

    Atur header x-oss-forbid-overwrite ke true dalam permintaan unggah. Jika objek dengan nama yang sama ada, unggahan gagal dengan kesalahan FileAlreadyExists. Jika dihilangkan atau diatur ke false, objek yang ada akan ditimpa.

Kurangi biaya permintaan PUT

Menetapkan kelas penyimpanan ke Deep Cold Archive selama unggah menimbulkan biaya permintaan PUT yang lebih tinggi. Kami merekomendasikan agar Anda menetapkan kelas penyimpanan objek ke Standard saat mengunggah objek, dan mengonfigurasi aturan siklus hidup untuk mengonversi kelas penyimpanan objek Standard ke Deep Cold Archive. Ini mengurangi biaya permintaan PUT.

Perilaku unggah konkuren

Hasilnya tergantung pada apakah versioning diaktifkan:

  • Jika versioning dinonaktifkan atau ditangguhkan: Jika beberapa pengguna mengunggah objek dengan nama yang sama, objek terakhir yang selesai diunggah akan menimpa objek sebelumnya. Objek sebelumnya tidak disimpan. Misalnya, jika Pengguna A selesai mengunggah setelah Pengguna B, objek yang diunggah oleh Pengguna A yang disimpan.

  • Jika versioning diaktifkan: Mengunggah objek dengan nama yang sama membuat versi baru, diidentifikasi oleh ID versi unik. OSS menentukan versi saat ini berdasarkan waktu mulai unggah. Misalnya, jika Pengguna B mulai mengunggah setelah Pengguna A, objek dari Pengguna B menjadi versi saat ini.

Optimalkan kinerja unggah

Mengunggah banyak objek dengan awalan berurutan (timestamp, karakter alfabet) memusatkan indeks dalam partisi tunggal, mengurangi laju permintaan. Gunakan awalan acak sebagai gantinya. Praktik terbaik kinerja OSS.