全部产品
Search
文档中心

Object Storage Service:Pembatasan bandwidth koneksi tunggal

更新时间:Nov 09, 2025

Mengakses file (objek) di Object Storage Service (OSS) dapat mengonsumsi sejumlah besar bandwidth. Pada klien di mana pembatasan trafik sulit dikontrol, hal ini dapat mempengaruhi aplikasi lainnya. Untuk menghindari masalah ini, Anda dapat menggunakan fitur pembatasan bandwidth koneksi tunggal yang disediakan oleh OSS untuk mengontrol trafik selama operasi seperti unggah dan unduh file, sehingga memastikan bandwidth jaringan yang cukup untuk aplikasi lainnya.

Catatan penggunaan

Sertakan parameter x-oss-traffic-limit dalam permintaan PutObject, AppendObject, PostObject, CopyObject, UploadPart, UploadPartCopy, dan GetObject, serta tentukan nilai pembatasan. Nilai tersebut harus berada dalam rentang 819.200 hingga 838.860.800. Satuan adalah bit/detik.

Batasi permintaan klien

Anda hanya dapat membatasi permintaan klien menggunakan kit pengembangan perangkat lunak (SDK). Kode berikut memberikan contoh cara membatasi permintaan unggah atau unduhan menggunakan SDK umum. Untuk contoh kode yang menggunakan SDK lainnya, lihat Ikhtisar SDK.

Pembatasan unggah dan unduhan sederhana

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

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Dalam contoh ini, endpoint wilayah Tiongkok (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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 akan diunggah dari jalur proyek tempat program sampel berada.
        String localFileName = "D:\\localpath\\examplefile.txt";
        // Tentukan jalur lengkap ke mana Anda ingin mengunduh objek. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan di jalur tersebut.
        // Jika Anda tidak menentukan jalur untuk objek yang diunduh, objek yang diunduh akan disimpan ke jalur proyek tempat program sampel berada.
        String downLoadFileName = "D:\\localpath\\exampleobject.txt";

        // Setel batas bandwidth menjadi 100 KB/detik.
        int limitSpeed = 100 * 1024 * 8;
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSS Client.
        // Panggil metode shutdown untuk melepaskan sumber daya terkait ketika OSS Client 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 {
            // Konfigurasikan pembatasan bandwidth untuk unggah objek.
            InputStream inputStream = new FileInputStream(localFileName);
            PutObjectRequest PutObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            PutObjectRequest.setTrafficLimit(limitSpeed);
            ossClient.putObject(PutObjectRequest);

            // Konfigurasikan pembatasan bandwidth untuk unduhan objek.
            GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
            getObjectRequest.setTrafficLimit(limitSpeed);
            File localFile = new File(downLoadFileName);
            ossClient.getObject(getObjectRequest, localFile);
        } catch (OSSException oe) {
            System.out.println("Tangkap OSSException, yang berarti permintaan Anda mencapai OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
            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("Tangkap 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();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Setel yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, untuk wilayah Tiongkok (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jalur lengkap tidak boleh berisi nama bucket.
$object = "exampledir/exampleobject.txt";
// Tentukan konten objek.
$content = "hello world";

$config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

// Batasi bandwidth menjadi 100 KB/detik, yaitu 819200 bit/detik.
$options = array(
      OssClient::OSS_HEADERS => array(
              OssClient::OSS_TRAFFIC_LIMIT => 819200,
));

try {
    // Unggah dengan pembatasan.
    $ossClient->putObject($bucket, $object, $content, $options);

    // Unduh dengan pembatasan.
    $ossClient->getObject($bucket, $object, $options);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": GAGAL\n");
    printf($e->getMessage() . "\n");
    return;
}

print(__FUNCTION__ . ": OK" . "\n");
const OSS = require('ali-oss')
const fs = require('fs')

const client = new OSS({
  // Setel region ke wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel region ke oss-cn-hangzhou.
  region: 'yourregion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel 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,
  // Setel bucket ke nama bucket Anda.
  bucket: 'yourbucketname'
});

// Setel pembatasan dalam header permintaan.
const headers = {  
 // Setel nilai pembatasan. Nilai minimum adalah 100 KB/detik.
 'x-oss-traffic-limit': 8 * 1024 * 100 
}

// Unggah dengan pembatasan.
async function put() {
  // Jalur file.
  const filePath = 'D:\\localpath\\examplefile.txt'; 
  // Buat objek stream file.
  const fileStream = fs.createReadStream(filePath); 
  const result = await client.putStream('file-name', fileStream, {
    // Setel header permintaan.
    headers, 
    // Timeout default adalah 60000 ms. Kesalahan dilaporkan jika permintaan habis waktu. Untuk unggahan dengan pembatasan, tingkatkan nilai timeout untuk mencegah kegagalan.
    timeout: 60000 
  });
  console.log(result);
}

put()

// Unduh dengan pembatasan.
async function get() {
  const result = await client.get('file name', {
    headers,
    // Timeout default adalah 60000 ms. Kesalahan dilaporkan jika permintaan habis waktu. Untuk unduhan dengan pembatasan, tingkatkan nilai timeout untuk mencegah kegagalan.
    timeout: 60000 
  })
  console.log(result)
}

get()
# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import OSS_TRAFFIC_LIMIT

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"

# Tentukan nama bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
object_name = 'exampledir/exampleobject.txt'
# Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt. Secara default, jika Anda tidak menentukan jalur file lokal, file lokal akan diunggah dari jalur proyek tempat program sampel berada.
local_file_name = 'D:\\localpath\\examplefile.txt'
# Tentukan jalur lokal ke mana Anda ingin mengunduh objek. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak ada file dengan nama yang sama, objek yang diunduh akan disimpan di jalur tersebut.
# Jika Anda tidak menentukan jalur untuk objek yang diunduh, objek yang diunduh akan disimpan ke jalur proyek tempat program sampel berada.
down_file_name = 'D:\\localpath\\exampleobject.txt'

# Konfigurasikan parameter headers untuk menyetel batas bandwidth menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
limit_speed = (100 * 1024 * 8)
headers = dict()
headers[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# Konfigurasikan pembatasan bandwidth untuk unggah objek.
result = bucket.put_object_from_file(object_name, local_file_name, headers=headers)
print('status respons http:', result.status)

# Konfigurasikan pembatasan bandwidth untuk unduhan objek.
result = bucket.get_object_to_file(object_name, down_file_name, headers=headers)
print('status respons http:', result.status)
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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";
var objectContent = "More than just cloud.";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
            
// Buat instance ClientConfiguration dan modifikasi parameter sesuai kebutuhan.
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);
    // Setel batas bandwidth untuk unggah objek menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
    var putRequest = new PutObjectRequest(bucketName, objectName, requestContent)
    {
        TrafficLimit = 100*1024*8
    };
    client.PutObject(putRequest);
    Console.WriteLine("Unggah objek berhasil");

    // Setel batas bandwidth untuk unduhan objek menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
    var getRequest = new GetObjectRequest(bucketName, objectName)
    {
        TrafficLimit = 100 * 1024 * 8
    };
    var getResult = client.GetObject(getRequest);
    Console.WriteLine("Unduh objek berhasil");
}
catch (Exception ex)
{
    Console.WriteLine("Unggah objek gagal, {0}", ex.Message);
}
package main

import (
	"log"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func main() {
	// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Gagal membuat penyedia kredensial: %v", err)
	}

	// Buat instance OSSClient.
	// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com. Tentukan endpoint aktual Anda.
	// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou. Tentukan wilayah aktual.
	options := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	options = append(options, oss.Region("yourRegion"))
	// Tentukan versi algoritma tanda tangan.
	options = append(options, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", options...)
	if err != nil {
		log.Fatalf("Gagal membuat klien OSS: %v", err)
	}

	// Tentukan nama bucket. Contoh: examplebucket.
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Gagal mendapatkan bucket '%s': %v", bucketName, err)
	}

	// Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt.
	// Jika Anda tidak menentukan jalur file lokal, file lokal akan diunggah dari jalur proyek tempat program sampel berada.
	localFilePath := "D:\\localpath\\examplefile.txt"
	fd, err := os.Open(localFilePath)
	if err != nil {
		log.Fatalf("Gagal membuka file lokal '%s': %v", localFilePath, err)
	}
	defer fd.Close()

	// Tentukan batas bandwidth untuk unggahan. Nilai parameter harus berupa angka. Satuan default: bit/detik. Dalam contoh ini, batas bandwidth diatur menjadi 5 MB/detik.
	var traffic int64 = 41943040

	// Konfigurasikan pembatasan bandwidth untuk unggah objek.
	// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap.
	objectName := "exampledir/exampleobject.txt"
	err = bucket.PutObject(objectName, fd, oss.TrafficLimitHeader(traffic))
	if err != nil {
		log.Fatalf("Gagal mengunggah objek '%s': %v", objectName, err)
	}

	// Konfigurasikan pembatasan bandwidth untuk unduhan objek.
	// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt. Lalu, tentukan jalur lengkap file lokal. Contoh: D:\\localpath\\exampleobject.txt.
	downloadFilePath := "D:\\localpath\\exampleobject.txt"
	err = bucket.GetObjectToFile(objectName, downloadFilePath, oss.TrafficLimitHeader(traffic))
	if err != nil {
		log.Fatalf("Gagal mengunduh objek '%s' ke '%s': %v", objectName, downloadFilePath, err)
	}

	log.Println("Unggah dan unduhan selesai dengan sukses")
}
#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
    
    /* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap objek. Contoh: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

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

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

    /* Unggah objek. */
    std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("yourLocalFilename", std::ios::in|std::ios::binary);
    PutObjectRequest putrequest(BucketName, ObjectName,content);
    /* Setel kecepatan maksimum untuk mengunggah objek menjadi 100 KB/detik. */
    putrequest.setTrafficLimit(819200);
    auto putoutcome = client.PutObject(putrequest);

    /* Unduh objek ke memori lokal. */
    GetObjectRequest getrequest(BucketName, ObjectName);
    /* Setel kecepatan maksimum untuk mengunduh objek menjadi 100 KB/detik. */
    getrequest.setTrafficLimit(819200);
    auto getoutcome = client.GetObject(getrequest);

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

Pembatasan unggah multipart

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.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class DemoApi2 {

    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, endpoint wilayah Tiongkok (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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.
        String objectName = "exampledir/exampleobject.txt";
        // Setel batas bandwidth menjadi 100 KB/detik.
        int limitSpeed = 100 * 1024 * 8;
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSS Client.
        // Panggil metode shutdown untuk melepaskan sumber daya terkait ketika OSS Client 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 InitiateMultipartUploadRequest.
            InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);


            // Inisialisasi tugas unggah multipart.
            InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
            // Dapatkan upload ID, yang secara unik mengidentifikasi tugas unggah multipart. Anda dapat menggunakan upload ID untuk melakukan operasi terkait, seperti membatalkan dan menanyakan tugas unggah multipart.
            String uploadId = upresult.getUploadId();

            // partETags adalah himpunan PartETags. PartETag terdiri dari nomor bagian dan ETag dari bagian yang diunggah.
            List<PartETag> partETags =  new ArrayList<PartETag>();
            // Tentukan ukuran setiap bagian, yang digunakan untuk menghitung jumlah bagian dari objek. Satuan: byte.
            final long partSize = 1 * 1024 * 1024L;   // Setel ukuran bagian menjadi 1 MB.

            // Tentukan jalur lengkap file lokal yang ingin Anda unggah. Secara default, jika Anda tidak menentukan jalur lengkap file lokal, file lokal akan diunggah dari jalur proyek tempat program sampel berada.
            final File sampleFile = new File("D:\\localpath\\examplefile.txt");
            long fileLength = sampleFile.length();
            int partCount = (int) (fileLength / partSize);
            if (fileLength % partSize != 0) {
                partCount++;
            }
            // Unggah semua bagian.
            for (int i = 0; i < partCount; i++) {
                long startPos = i * partSize;
                long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
                InputStream instream = new FileInputStream(sampleFile);
                // Lewati bagian yang telah diunggah.
                instream.skip(startPos);
                UploadPartRequest uploadPartRequest = new UploadPartRequest();
                uploadPartRequest.setBucketName(bucketName);
                uploadPartRequest.setKey(objectName);
                uploadPartRequest.setUploadId(uploadId);
                uploadPartRequest.setInputStream(instream);
                // Tentukan ukuran setiap bagian. Setiap bagian kecuali bagian terakhir harus sama dengan atau lebih besar dari 100 KB.
                uploadPartRequest.setPartSize(curPartSize);
                // Tentukan nomor bagian. Setiap bagian memiliki nomor bagian. Nomornya berkisar dari 1 hingga 10000. Jika nomor yang ditentukan di luar rentang, OSS mengembalikan kode kesalahan InvalidArgument.
                uploadPartRequest.setPartNumber( i + 1);
                // Tentukan batas bandwidth.
                uploadPartRequest.setTrafficLimit(limitSpeed);
                // Bagian tidak harus diunggah secara berurutan. Mereka dapat diunggah dari klien OSS yang berbeda. OSS mengurutkan bagian berdasarkan nomor bagian mereka dan menggabungkannya menjadi objek lengkap.
                UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                // Setiap kali sebuah bagian diunggah, OSS mengembalikan hasil yang berisi PartETag. PartETags disimpan dalam partETags.
                partETags.add(uploadPartResult.getPartETag());
            }


            // Buat objek CompleteMultipartUploadRequest.
            // Saat Anda memanggil operasi CompleteMultipartUpload, Anda harus menyediakan semua PartETags yang valid. Setelah OSS menerima PartETags, OSS memverifikasi setiap bagian satu per satu. Setelah semua bagian diverifikasi, OSS menggabungkan bagian-bagian ini menjadi objek lengkap.
            CompleteMultipartUploadRequest completeMultipartUploadRequest =
                    new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);

            // Selesaikan tugas unggah multipart.
            CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
            System.out.println(completeMultipartUploadResult.getETag());
        } catch (OSSException oe) {
            System.out.println("Tangkap OSSException, yang berarti permintaan Anda mencapai OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
            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("Tangkap 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();
            }
        }
    }
}
<?php
  if (is_file(__DIR__ . '/../autoload.php')) {
  require_once __DIR__ . '/../autoload.php';
  }
  if (is_file(__DIR__ . '/../vendor/autoload.php')) {
  require_once __DIR__ . '/../vendor/autoload.php';
  }
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;
use OSS\Core\OssUtil;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Setel yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, untuk wilayah Tiongkok (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jalur lengkap tidak boleh berisi nama bucket.
$object = "exampledir/exampleobject.txt";
// Tentukan jalur lengkap file lokal. Contoh: D:\\localpath\\examplefile.txt. Jika Anda tidak menentukan jalur lokal, file akan diunggah dari jalur lokal yang sesuai dengan proyek program sampel.
$uploadFile = "D:\\localpath\\examplefile.txt";

/**
*  Langkah 1: Inisialisasi acara unggah multipart dan dapatkan uploadId.
*/
try{
  $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

  // uploadId dikembalikan. uploadId secara unik mengidentifikasi acara unggah multipart. Gunakan uploadId untuk melakukan operasi terkait, seperti membatalkan atau menanyakan unggah multipart.
  $uploadId = $ossClient->initiateMultipartUpload($bucket, $object);
} catch(OssException $e) {
  printf(__FUNCTION__ . ": initiateMultipartUpload GAGAL\n");
  printf($e->getMessage() . "\n");
  return;
}
print(__FUNCTION__ . ": initiateMultipartUpload OK" . "\n");
/*
* Langkah 2: Unggah bagian.
*/
$partSize = 10 * 1024 * 1024;
$uploadFileSize = filesize($uploadFile);
$pieces = $ossClient->generateMultiuploadParts($uploadFileSize, $partSize);
$responseUploadPart = array();
$uploadPosition = 0;
$isCheckMd5 = true;
foreach ($pieces as $i => $piece) {
  $fromPos = $uploadPosition + (integer)$piece[$ossClient::OSS_SEEK_TO];
  $toPos = (integer)$piece[$ossClient::OSS_LENGTH] + $fromPos - 1;
  $upOptions = array(
    // File yang akan diunggah.
    $ossClient::OSS_FILE_UPLOAD => $uploadFile,
    // Setel nomor bagian.
    $ossClient::OSS_PART_NUM => ($i + 1),
    // Tentukan posisi awal bagian yang akan diunggah.
    $ossClient::OSS_SEEK_TO => $fromPos,
    // Tentukan panjang file.
    $ossClient::OSS_LENGTH => $toPos - $fromPos + 1,
    // Tentukan apakah validasi MD5 diaktifkan. Setel nilai menjadi true untuk mengaktifkan validasi MD5.
    $ossClient::OSS_CHECK_MD5 => $isCheckMd5,
    // Batasi bandwidth menjadi 100 KB/detik, yaitu 819200 bit/detik.
    $options = array(
      OssClient::OSS_HEADERS => array(
        OssClient::OSS_TRAFFIC_LIMIT => 819200,
      ))

  );
  // Aktifkan validasi MD5.
  if ($isCheckMd5) {
    $contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
    $upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;
  }
  try {
    // Unggah bagian.
    $responseUploadPart[] = $ossClient->uploadPart($bucket, $object, $uploadId, $upOptions);
  } catch(OssException $e) {
    printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} GAGAL\n");
    printf($e->getMessage() . "\n");
    return;
  }
  printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} OK\n");
}
// $uploadParts adalah array yang terdiri dari ETag dan nomor bagian (PartNumber) dari setiap bagian.
$uploadParts = array();
foreach ($responseUploadPart as $i => $eTag) {
  $uploadParts[] = array(
    'PartNumber' => ($i + 1),
    'ETag' => $eTag,
  );
}
/**
* Langkah 3: Selesaikan unggahan.
*/
try {
  // Saat Anda memanggil operasi completeMultipartUpload, sediakan semua $uploadParts yang valid. Setelah OSS menerima $uploadParts yang dikirimkan, ia memverifikasi setiap bagian. Setelah semua bagian diverifikasi, OSS menggabungkannya menjadi file lengkap.
  $ossClient->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts);
  }  catch(OssException $e) {
  printf(__FUNCTION__ . ": completeMultipartUpload GAGAL\n");
  printf($e->getMessage() . "\n");
  return;
  }
  printf(__FUNCTION__ . ": completeMultipartUpload OK\n");
# -*- coding: utf-8 -*-
import os
from oss2 import SizedFileAdapter, determine_part_size
from oss2.headers import OSS_TRAFFIC_LIMIT
from oss2.models import PartInfo
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"

# Tentukan nama bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Tentukan jalur lengkap objek. Jalur lengkap objek tidak boleh berisi nama bucket. Contoh: exampledir/exampleobject.txt.
key = 'exampledir/exampleobject.txt'
# Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt.
filename = 'D:\\localpath\\examplefile.txt'

total_size = os.path.getsize(filename)
# Gunakan metode determine_part_size untuk menentukan ukuran bagian.
part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# Mulai tugas unggah multipart.
upload_id = bucket.init_multipart_upload(key).upload_id
parts = []

# Konfigurasikan parameter headers untuk menyetel batas bandwidth menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
limit_speed = (100 * 1024 * 8)
headers = dict()
headers[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# Unggah bagian satu per satu.
with open(filename, 'rb') as fileobj:
    part_number = 1
    offset = 0
    while offset < total_size:
        num_to_upload = min(part_size, total_size - offset)
        # Panggil metode SizedFileAdapter(fileobj, size) untuk menghasilkan objek baru dan menghitung ulang posisi dari mana operasi tambahan dimulai.
        result = bucket.upload_part(key, upload_id, part_number,
                                    SizedFileAdapter(fileobj, num_to_upload), headers=headers)
        parts.append(PartInfo(part_number, result.etag))

        offset += num_to_upload
        part_number += 1

# Selesaikan tugas unggah multipart.
# Kode berikut memberikan contoh cara mengonfigurasi headers saat Anda menyelesaikan tugas unggah multipart:
headers = dict()
# Tentukan daftar kontrol akses (ACL) objek. Dalam contoh ini, parameter ini disetel ke OBJECT_ACL_PRIVATE, yang menunjukkan bahwa ACL objek bersifat pribadi.
# headers["x-oss-object-acl"] = oss2.OBJECT_ACL_PRIVATE
bucket.complete_multipart_upload(key, upload_id, parts, headers=headers)
# bucket.complete_multipart_upload(key, upload_id, parts)

# Verifikasi hasil tugas unggah multipart.
with open(filename, 'rb') as fileobj:
    assert bucket.get_object(key).read() == fileobj.read()

Batasi bandwidth menggunakan URL file

Untuk file dengan izin baca-publik atau baca-tulis-publik, Anda dapat menambahkan parameter pembatasan x-oss-traffic-limit=<value> ke URL file untuk membatasi akses. Misalnya, URL https://examplebucket.oss-cn-hangzhou.aliyuncs.com/video.mp4?x-oss-traffic-limit=819200 menentukan bahwa kecepatan unduh untuk file video.mp4 dibatasi hingga 100 KB/detik. Gambar berikut menunjukkan efek pembatasan:video

Batasi bandwidth menggunakan URL yang ditandatangani

Saat menggunakan SDK untuk menghasilkan URL yang ditandatangani guna mengakses file pribadi, Anda harus menyertakan parameter pembatasan dalam perhitungan tanda tangan. Kode berikut memberikan contoh cara menambahkan parameter pembatasan ke URL yang ditandatangani menggunakan SDK umum. Untuk contoh kode yang menggunakan SDK lainnya, lihat Ikhtisar SDK.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.URL;
import java.util.Date;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // Dalam contoh ini, endpoint wilayah Tiongkok (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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 akan diunggah dari jalur proyek tempat program sampel berada.
        String localFileName = "D:\\localpath\\examplefile.txt";

        // Tentukan jalur lengkap ke mana Anda ingin mengunduh objek. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak, objek yang diunduh akan disimpan di jalur tersebut.
        // Jika Anda tidak menentukan jalur untuk objek yang diunduh, objek yang diunduh akan disimpan ke jalur proyek tempat program sampel berada.
        String downLoadFileName = "D:\\localpath\\exampleobject.txt";

        // Setel batas bandwidth menjadi 100 KB/detik.
        int limitSpeed = 100 * 1024 * 8;
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSS Client.
        // Panggil metode shutdown untuk melepaskan sumber daya terkait ketika OSS Client 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 {
            // Hasilkan URL yang ditandatangani yang mencakup parameter pembatasan bandwidth untuk unggah objek dan setel periode validitas URL menjadi 60 detik.
            Date date = new Date();
            date.setTime(date.getTime() + 60 * 1000);
            GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);
            request.setExpiration(date);
            request.setTrafficLimit(limitSpeed);
            URL signedUrl = ossClient.generatePresignedUrl(request);
            System.out.println("put object url" + signedUrl);

            // Konfigurasikan pembatasan bandwidth untuk unggah objek.
            InputStream inputStream = new FileInputStream(localFileName);
            ossClient.putObject(signedUrl, inputStream, -1, null, true);

            // Hasilkan URL yang ditandatangani yang mencakup parameter pembatasan bandwidth untuk unduhan objek dan setel periode validitas URL menjadi 60 detik.
            date = new Date();
            date.setTime(date.getTime() + 60 * 1000);
            request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
            request.setExpiration(date);
            request.setTrafficLimit(limitSpeed);
            signedUrl = ossClient.generatePresignedUrl(request);
            System.out.println("get object url" + signedUrl);

            // Konfigurasikan pembatasan bandwidth untuk unduhan objek.
            GetObjectRequest getObjectRequest =  new GetObjectRequest(signedUrl, null);
            ossClient.getObject(getObjectRequest, new File(downLoadFileName));
        } catch (OSSException oe) {
            System.out.println("Tangkap OSSException, yang berarti permintaan Anda mencapai OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
            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("Tangkap 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();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\Core\OssException;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur.
$provider = new EnvironmentVariableCredentialsProvider();
// Setel yourEndpoint ke Endpoint wilayah tempat bucket berada. Misalnya, untuk wilayah Tiongkok (Hangzhou), setel Endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jalur lengkap tidak boleh berisi nama bucket.
$object = "exampledir/exampleobject.txt";

$config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

// Batasi bandwidth menjadi 100 KB/detik, yaitu 819200 bit/detik.
$options = array(
        OssClient::OSS_TRAFFIC_LIMIT => 819200,
);

// Buat URL yang ditandatangani untuk unggahan dengan pembatasan. URL tersebut valid selama 60 detik.
$timeout = 60;
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options);
print($signedUrl);

// Buat URL yang ditandatangani untuk unduhan dengan pembatasan. URL tersebut valid selama 120 detik.
$timeout = 120;
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print($signedUrl);
# -*- coding: utf-8 -*-

import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import OSS_TRAFFIC_LIMIT

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"

# Tentukan nama bucket.
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
object_name = 'exampledir/exampleobject.txt'
# Tentukan jalur lengkap file lokal yang ingin Anda unggah. Contoh: D:\\localpath\\examplefile.txt. Secara default, jika Anda tidak menentukan jalur file lokal, file lokal akan diunggah dari jalur proyek tempat program sampel berada.
local_file_name = 'D:\\localpath\\examplefile.txt'
# Tentukan jalur lokal ke mana Anda ingin mengunduh objek. Jika file dengan nama yang sama sudah ada, objek yang diunduh akan menimpa file tersebut. Jika tidak ada file dengan nama yang sama, objek yang diunduh akan disimpan di jalur tersebut.
# Jika Anda tidak menentukan jalur untuk objek yang diunduh, objek yang diunduh akan disimpan ke jalur proyek tempat program sampel berada.
down_file_name = 'D:\\localpath\\exampleobject.txt'

# Konfigurasikan parameter params untuk menyetel batas bandwidth menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
limit_speed = (100 * 1024 * 8)
params = dict()
params[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# Hasilkan URL yang ditandatangani yang mencakup parameter pembatasan bandwidth untuk unggah objek dan setel periode validitas URL menjadi 60 detik.
url = bucket.sign_url('PUT', object_name, 60, params=params)
print('put object url:', url)

# Konfigurasikan pembatasan bandwidth untuk unggah objek.
result = bucket.put_object_with_url_from_file(url, local_file_name)
print('status respons http:', result.status)

# Hasilkan URL yang ditandatangani yang mencakup parameter pembatasan bandwidth untuk unduhan objek dan setel periode validitas URL menjadi 60 detik.
url = bucket.sign_url('GET', object_name, 60, params=params)
print('get object url:', url)

# Konfigurasikan pembatasan bandwidth untuk unduhan objek.
result = bucket.get_object_with_url_to_file(url, down_file_name)
print('status respons http:', result.status)
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;

// Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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";
var objectContent = "More than just cloud.";
var downloadFilename  = "D:\\localpath\\examplefile.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.
const string region = "cn-hangzhou";
            
// Buat instance ClientConfiguration dan modifikasi parameter sesuai kebutuhan.
 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
{       
    // Hasilkan URL yang ditandatangani untuk mengunggah objek.
    var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Put)
    {
        Expiration = DateTime.Now.AddHours(1),
    };

    // Setel batas bandwidth menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
    generatePresignedUriRequest.AddQueryParam("x-oss-traffic-limit", "819200");

    var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest);
    // Gunakan URL yang ditandatangani untuk mengunggah objek.
    var buffer = Encoding.UTF8.GetBytes(objectContent);
    using (var ms = new MemoryStream(buffer))
    {
        client.PutObject(signedUrl, ms);
    }
    Console.WriteLine("Unggah objek dengan tanda tangan berhasil. {0} ", signedUrl.ToString());


    var metadata = client.GetObjectMetadata(bucketName, objectName);
    var etag = metadata.ETag;
    // Hasilkan URL yang ditandatangani untuk mengunduh objek.
    // Setel batas bandwidth menjadi 100 KB/detik, yaitu sama dengan 819.200 bit/detik.
    var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get);
    req.AddQueryParam("x-oss-traffic-limit", "819200");

    var uri = client.GeneratePresignedUri(req);
    // Gunakan URL yang ditandatangani untuk mengunduh objek.
    OssObject ossObject = client.GetObject(uri);
    using (var file = File.Open(downloadFilename, FileMode.OpenOrCreate))
    {
        using (Stream stream = ossObject.Content)
        {
            int length = 4 * 1024;
            var buf = new byte[length];
            do
            {
                length = stream.Read(buf, 0, length);
                file.Write(buf, 0, length);
            } while (length != 0);
        }
    }
    Console.WriteLine("Unduh objek dengan tanda tangan berhasil. {0} ", uri.ToString());
}
catch (Exception ex)
{
    Console.WriteLine("Unggah objek gagal, {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
    /* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
    
    /* Tentukan endpoint wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah Tiongkok (Hangzhou), setel wilayah menjadi cn-hangzhou.*/
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap objek. Contoh: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt"; 

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

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

    /* Setel periode validitas URL yang ditandatangani menjadi 32.400 detik. */
    std::time_t expires = std::time(nullptr) + 1200; 
    /* Hasilkan URL yang ditandatangani yang digunakan untuk mengunggah objek. */
    GeneratePresignedUrlRequest putrequest(BucketName, ObjectName, Http::Put);
    putrequest.setExpires(expires);
    /* Setel kecepatan maksimum untuk mengunggah objek menjadi 100 KB/detik. */
    putrequest.setTrafficLimit(819200);
    auto genOutcome = client.GeneratePresignedUrl(putrequest);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "test cpp sdk";
    /* Tampilkan URL unggah yang ditandatangani. */
    std::cout << "Signed upload URL:" << genOutcome.result() << std::endl;

    /* Gunakan URL yang ditandatangani untuk mengunggah objek. */
    auto outcome = client.PutObjectByUrl(genOutcome.result(), content);
    /* Hasilkan URL yang ditandatangani yang digunakan untuk mengunduh objek. */
    GeneratePresignedUrlRequest getrequest(BucketName, ObjectName, Http::Get);
    getrequest.setExpires(expires);
    /* Setel kecepatan maksimum untuk mengunduh objek menjadi 100 KB/detik. */
    getrequest.setTrafficLimit(819200);
    genOutcome = client.GeneratePresignedUrl(getrequest);
    /* Tampilkan URL unduhan yang ditandatangani. */
    std::cout << "Signed download URL:" << genOutcome.result() << std::endl;
    /* Gunakan URL yang ditandatangani untuk mengunduh objek. */
    auto goutcome = client.GetObjectByUrl(genOutcome.result());
    
    /* Lepaskan sumber daya, seperti sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}