すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:単一接続の帯域幅調整

最終更新日:Nov 09, 2025

Object Storage Service (OSS) のファイル (オブジェクト) にアクセスすると、大量の帯域幅を消費する可能性があります。トラフィックシェーピングの制御が困難なクライアントでは、他のアプリケーションに影響を与える可能性があります。この問題を回避するために、OSS が提供する単一接続の帯域幅調整機能を使用して、ファイルのアップロードやダウンロードなどの操作中のトラフィックを制御できます。これにより、他のアプリケーションに十分なネットワーク帯域幅を確保できます。

使用上の注意

PutObjectAppendObjectPostObjectCopyObjectUploadPartUploadPartCopy、および GetObject リクエストに x-oss-traffic-limit パラメーターを含め、調整値を指定します。値は 819200 から 838860800 の間でなければなりません。単位は bit/s です。

クライアントリクエストの調整

クライアントリクエストの調整は、SDK (ソフトウェア開発キット) を使用してのみ実行できます。次のコードは、一般的な SDK を使用してアップロードまたはダウンロードリクエストを調整する方法の例を示しています。他の SDK を使用したコード例については、「SDK の概要」をご参照ください。

単純なアップロードとダウンロードの調整

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import 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 {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。実際のエンドポイントを指定してください。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。 
        String bucketName = "examplebucket";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 
        String objectName = "exampledir/exampleobject.txt";
        // アップロードするローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。 
        // ローカルファイルのパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。 
        String localFileName = "D:\\localpath\\examplefile.txt";
        // オブジェクトをダウンロードする完全なパスを指定します。同じ名前のファイルが既に存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。それ以外の場合、ダウンロードされたオブジェクトはパスに保存されます。 
        // ダウンロードしたオブジェクトのパスを指定しない場合、ダウンロードしたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。 
        String downLoadFileName = "D:\\localpath\\exampleobject.txt";

        // 帯域幅制限を 100 KB/s に設定します。 
        int limitSpeed = 100 * 1024 * 8;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 
        String region = "cn-hangzhou";

        // OSS Client インスタンスを作成します。 
        // OSS Client が不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
        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(localFileName);
            PutObjectRequest PutObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            PutObjectRequest.setTrafficLimit(limitSpeed);
            ossClient.putObject(PutObjectRequest);

            // オブジェクトのダウンロードの帯域幅調整を設定します。 
            GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
            getObjectRequest.setTrafficLimit(limitSpeed);
            File localFile = new File(downLoadFileName);
            ossClient.getObject(getObjectRequest, localFile);
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + 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;

// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
$provider = new EnvironmentVariableCredentialsProvider();
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// バケット名を指定します。例: examplebucket。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。完全なパスにバケット名を含めることはできません。
$object = "exampledir/exampleobject.txt";
// オブジェクトのコンテンツを指定します。
$content = "hello world";

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

// 帯域幅を 100 KB/s (819200 bit/s) に調整します。
$options = array(
      OssClient::OSS_HEADERS => array(
              OssClient::OSS_TRAFFIC_LIMIT => 819200,
));

try {
    // 調整されたアップロード。
    $ossClient->putObject($bucket, $object, $content, $options);

    // 調整されたダウンロード。
    $ossClient->getObject($bucket, $object, $options);
} catch (OssException $e) {
    printf(__FUNCTION__ . ": FAILED\n");
    printf($e->getMessage() . "\n");
    return;
}

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

const client = new OSS({
  // region をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、region を oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // bucket をバケットの名前に設定します。
  bucket: 'yourbucketname'
});

// リクエストヘッダーで調整を設定します。
const headers = {  
 // 調整値を設定します。最小値は 100 KB/s です。
 'x-oss-traffic-limit': 8 * 1024 * 100 
}

// 調整付きでアップロードします。
async function put() {
  // ファイルパス。
  const filePath = 'D:\\localpath\\examplefile.txt'; 
  // ファイルストリームオブジェクトを作成します。
  const fileStream = fs.createReadStream(filePath); 
  const result = await client.putStream('file-name', fileStream, {
    // リクエストヘッダーを設定します。
    headers, 
    // デフォルトのタイムアウトは 60000 ms です。リクエストがタイムアウトするとエラーが報告されます。調整されたアップロードの場合は、失敗を防ぐためにタイムアウト値を増やしてください。
    timeout: 60000 
  });
  console.log(result);
}

put()

// 調整付きでダウンロードします。
async function get() {
  const result = await client.get('file name', {
    headers,
    // デフォルトのタイムアウトは 60000 ms です。リクエストがタイムアウトするとエラーが報告されます。調整されたダウンロードの場合は、失敗を防ぐためにタイムアウト値を増やしてください。
    timeout: 60000 
  })
  console.log(result)
}

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

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

# 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマッピングされるリージョンの ID を指定します。例: cn-hangzhou。このパラメーターは、署名アルゴリズム V4 を使用する場合に必要です。
region = "cn-hangzhou"

# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 
object_name = 'exampledir/exampleobject.txt'
# アップロードするローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。デフォルトでは、ローカルファイルのパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。 
local_file_name = 'D:\\localpath\\examplefile.txt'
# オブジェクトをダウンロードするローカルパスを指定します。同じ名前のファイルが既に存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。同じ名前のファイルが存在しない場合、ダウンロードされたオブジェクトはパスに保存されます。 
# ダウンロードしたオブジェクトのパスを指定しない場合、ダウンロードしたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。 
down_file_name = 'D:\\localpath\\exampleobject.txt'

# headers パラメーターを設定して、帯域幅制限を 100 KB/s (819,200 bit/s) に設定します。 
limit_speed = (100 * 1024 * 8)
headers = dict()
headers[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# オブジェクトのアップロードの帯域幅調整を設定します。 
result = bucket.put_object_from_file(object_name, local_file_name, headers=headers)
print('http response status:', result.status)

# オブジェクトのダウンロードの帯域幅調整を設定します。 
result = bucket.get_object_to_file(object_name, down_file_name, headers=headers)
print('http response status:', result.status)
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。 
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 
var objectName = "exampledir/exampleobject.txt";
var objectContent = "More than just cloud.";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
            
// ClientConfiguration インスタンスを作成し、必要に応じてパラメーターを変更します。
var conf = new ClientConfiguration();
            
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
            
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{
    byte[] binaryData = Encoding.ASCII.GetBytes(objectContent);
    MemoryStream requestContent = new MemoryStream(binaryData);
    // オブジェクトのアップロードの帯域幅制限を 100 KB/s (819,200 bit/s) に設定します。 
    var putRequest = new PutObjectRequest(bucketName, objectName, requestContent)
    {
        TrafficLimit = 100*1024*8
    };
    client.PutObject(putRequest);
    Console.WriteLine("Put object succeeded");

    // オブジェクトのダウンロードの帯域幅制限を 100 KB/s (819,200 bit/s) に設定します。 
    var getRequest = new GetObjectRequest(bucketName, objectName)
    {
        TrafficLimit = 100 * 1024 * 8
    };
    var getResult = client.GetObject(getRequest);
    Console.WriteLine("Get object succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}
package main

import (
	"log"
	"os"

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

func main() {
	// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		log.Fatalf("Failed to create credentials provider: %v", err)
	}

	// OSSClient インスタンスを作成します。 
	// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。実際のエンドポイントを指定してください。 
	// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。実際のリージョンを指定してください。
	options := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
	options = append(options, oss.Region("yourRegion"))
	// 署名アルゴリズムのバージョンを指定します。
	options = append(options, oss.AuthVersion(oss.AuthV4))
	client, err := oss.New("yourEndpoint", "", "", options...)
	if err != nil {
		log.Fatalf("Failed to create OSS client: %v", err)
	}

	// バケットの名前を指定します。例: examplebucket。 
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		log.Fatalf("Failed to get bucket '%s': %v", bucketName, err)
	}

	// アップロードするローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。 
	// ローカルファイルのパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。 
	localFilePath := "D:\\localpath\\examplefile.txt"
	fd, err := os.Open(localFilePath)
	if err != nil {
		log.Fatalf("Failed to open local file '%s': %v", localFilePath, err)
	}
	defer fd.Close()

	// アップロードの帯域幅制限を指定します。パラメーターの値は数値である必要があります。デフォルトの単位: bit/s。この例では、帯域幅制限は 5 MB/s に設定されています。 
	var traffic int64 = 41943040

	// オブジェクトのアップロードの帯域幅調整を設定します。 
	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。 
	objectName := "exampledir/exampleobject.txt"
	err = bucket.PutObject(objectName, fd, oss.TrafficLimitHeader(traffic))
	if err != nil {
		log.Fatalf("Failed to upload object '%s': %v", objectName, err)
	}

	// オブジェクトのダウンロードの帯域幅調整を設定します。 
	// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。次に、ローカルファイルの完全なパスを指定します。例: D:\\localpath\\exampleobject.txt。 
	downloadFilePath := "D:\\localpath\\exampleobject.txt"
	err = bucket.GetObjectToFile(objectName, downloadFilePath, oss.TrafficLimitHeader(traffic))
	if err != nil {
		log.Fatalf("Failed to download object '%s' to '%s': %v", objectName, downloadFilePath, err)
	}

	log.Println("Upload and download completed successfully")
}
#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;

int main(void)
{
    /* OSS へのアクセスに使用されるアカウントに関する情報を初期化します。 */
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /* バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 */
    std::string Region = "yourRegion";
    /* バケットの名前を指定します。例: examplebucket。 */
    std::string BucketName = "examplebucket";
    /* オブジェクトの完全なパスを指定します。オブジェクトの完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* オブジェクトをアップロードします。 */
    std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("yourLocalFilename", std::ios::in|std::ios::binary);
    PutObjectRequest putrequest(BucketName, ObjectName,content);
    /* オブジェクトをアップロードする最大速度を 100 KB/s に設定します。 */
    putrequest.setTrafficLimit(819200);
    auto putoutcome = client.PutObject(putrequest);

    /* オブジェクトをローカルメモリにダウンロードします。 */
    GetObjectRequest getrequest(BucketName, ObjectName);
    /* オブジェクトをダウンロードする最大速度を 100 KB/s に設定します。 */
    getrequest.setTrafficLimit(819200);
    auto getoutcome = client.GetObject(getrequest);

    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    return 0;
}

マルチパートアップロードの調整

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 {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。実際のエンドポイントを指定してください。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。 
        String bucketName = "examplebucket";
        // オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。完全なパスにバケット名を含めないでください。 
        String objectName = "exampledir/exampleobject.txt";
        // 帯域幅制限を 100 KB/s に設定します。 
        int limitSpeed = 100 * 1024 * 8;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 
        String region = "cn-hangzhou";

        // OSS Client インスタンスを作成します。 
        // OSS Client が不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // InitiateMultipartUploadRequest オブジェクトを作成します。 
            InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName);


            // マルチパートアップロードタスクを初期化します。 
            InitiateMultipartUploadResult upresult = ossClient.initiateMultipartUpload(request);
            // アップロード ID を取得します。これはマルチパートアップロードタスクを一意に識別します。アップロード ID を使用して、マルチパートアップロードタスクのキャンセルやクエリなどの関連操作を実行できます。 
            String uploadId = upresult.getUploadId();

            // partETags は PartETags のセットです。PartETag は、アップロードされたパートのパート番号と ETag で構成されます 
            List<PartETag> partETags =  new ArrayList<PartETag>();
            // 各パートのサイズを指定します。これはオブジェクトのパート数を計算するために使用されます。単位: バイト。 
            final long partSize = 1 * 1024 * 1024L;   // パートサイズを 1 MB に設定します。 

            // アップロードするローカルファイルの完全なパスを指定します。デフォルトでは、ローカルファイルの完全なパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。 
            final File sampleFile = new File("D:\\localpath\\examplefile.txt");
            long fileLength = sampleFile.length();
            int partCount = (int) (fileLength / partSize);
            if (fileLength % partSize != 0) {
                partCount++;
            }
            // すべてのパートをアップロードします。 
            for (int i = 0; i < partCount; i++) {
                long startPos = i * partSize;
                long curPartSize = (i + 1 == partCount) ? (fileLength - startPos) : partSize;
                InputStream instream = new FileInputStream(sampleFile);
                // アップロード済みのパートをスキップします。 
                instream.skip(startPos);
                UploadPartRequest uploadPartRequest = new UploadPartRequest();
                uploadPartRequest.setBucketName(bucketName);
                uploadPartRequest.setKey(objectName);
                uploadPartRequest.setUploadId(uploadId);
                uploadPartRequest.setInputStream(instream);
                // 各パートのサイズを指定します。最後のパートを除く各パートは 100 KB 以上である必要があります。 
                uploadPartRequest.setPartSize(curPartSize);
                // パート番号を指定します。各パートにはパート番号があります。番号の範囲は 1 から 10000 です。指定された番号が範囲外の場合、OSS は InvalidArgument エラーコードを返します。 
                uploadPartRequest.setPartNumber( i + 1);
                // 帯域幅制限を指定します。
                uploadPartRequest.setTrafficLimit(limitSpeed);
                // パートは必ずしも順番にアップロードされるわけではありません。異なる OSS クライアントからアップロードできます。OSS はパート番号に基づいてパートをソートし、それらを結合して完全なオブジェクトにします。 
                UploadPartResult uploadPartResult = ossClient.uploadPart(uploadPartRequest);
                // パートがアップロードされるたびに、OSS は PartETag を含む結果を返します。PartETags は partETags に保存されます。 
                partETags.add(uploadPartResult.getPartETag());
            }


            // CompleteMultipartUploadRequest オブジェクトを作成します。 
            // CompleteMultipartUpload 操作を呼び出すときは、すべての有効な PartETag を提供する必要があります。OSS が PartETag を受信すると、OSS はすべてのパートを 1 つずつ検証します。すべてのパートが検証されると、OSS はこれらのパートを結合して完全なオブジェクトにします。 
            CompleteMultipartUploadRequest completeMultipartUploadRequest =
                    new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partETags);

            // マルチパートアップロードタスクを完了します。 
            CompleteMultipartUploadResult completeMultipartUploadResult = ossClient.completeMultipartUpload(completeMultipartUploadRequest);
            System.out.println(completeMultipartUploadResult.getETag());
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + 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;

// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// バケット名を指定します。例: examplebucket。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。完全なパスにバケット名を含めることはできません。
$object = "exampledir/exampleobject.txt";
// ローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。ローカルパスを指定しない場合、ファイルはサンプルプログラムのプロジェクトに対応するローカルパスからアップロードされます。
$uploadFile = "D:\\localpath\\examplefile.txt";

/**
*  ステップ 1: マルチパートアップロードイベントを初期化し、uploadId を取得します。
*/
try{
  $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);

  // uploadId が返されます。uploadId はマルチパートアップロードイベントを一意に識別します。uploadId を使用して、マルチパートアップロードのキャンセルやクエリなどの関連操作を実行します。
  $uploadId = $ossClient->initiateMultipartUpload($bucket, $object);
} catch(OssException $e) {
  printf(__FUNCTION__ . ": initiateMultipartUpload FAILED\n");
  printf($e->getMessage() . "\n");
  return;
}
print(__FUNCTION__ . ": initiateMultipartUpload OK" . "\n");
/*
* ステップ 2: パートをアップロードします。
*/
$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(
    // アップロードするファイル。
    $ossClient::OSS_FILE_UPLOAD => $uploadFile,
    // パート番号を設定します。
    $ossClient::OSS_PART_NUM => ($i + 1),
    // アップロードするパートの開始位置を指定します。
    $ossClient::OSS_SEEK_TO => $fromPos,
    // ファイルの長さを指定します。
    $ossClient::OSS_LENGTH => $toPos - $fromPos + 1,
    // MD5 検証を有効にするかどうかを指定します。値を true に設定すると、MD5 検証が有効になります。
    $ossClient::OSS_CHECK_MD5 => $isCheckMd5,
    // 帯域幅を 100 KB/s (819200 bit/s) に調整します。
    $options = array(
      OssClient::OSS_HEADERS => array(
        OssClient::OSS_TRAFFIC_LIMIT => 819200,
      ))

  );
  // MD5 検証を有効にします。
  if ($isCheckMd5) {
    $contentMd5 = OssUtil::getMd5SumForFile($uploadFile, $fromPos, $toPos);
    $upOptions[$ossClient::OSS_CONTENT_MD5] = $contentMd5;
  }
  try {
    // パートをアップロードします。
    $responseUploadPart[] = $ossClient->uploadPart($bucket, $object, $uploadId, $upOptions);
  } catch(OssException $e) {
    printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} FAILED\n");
    printf($e->getMessage() . "\n");
    return;
  }
  printf(__FUNCTION__ . ": initiateMultipartUpload, uploadPart - part#{$i} OK\n");
}
// $uploadParts は、各パートの ETag とパート番号 (PartNumber) で構成される配列です。
$uploadParts = array();
foreach ($responseUploadPart as $i => $eTag) {
  $uploadParts[] = array(
    'PartNumber' => ($i + 1),
    'ETag' => $eTag,
  );
}
/**
* ステップ 3: アップロードを完了します。
*/
try {
  // completeMultipartUpload 操作を呼び出すときは、すべての有効な $uploadParts を提供します。OSS が送信された $uploadParts を受信すると、各パートを検証します。すべてのパートが検証されると、OSS はそれらを結合して完全なファイルにします。
  $ossClient->completeMultipartUpload($bucket, $object, $uploadId, $uploadParts);
  }  catch(OssException $e) {
  printf(__FUNCTION__ . ": completeMultipartUpload FAILED\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

# 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマッピングされるリージョンの ID を指定します。例: cn-hangzhou。このパラメーターは、署名アルゴリズム V4 を使用する場合に必要です。
region = "cn-hangzhou"

# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# オブジェクトの完全なパスを指定します。オブジェクトの完全なパスにバケット名を含めることはできません。例: exampledir/exampleobject.txt。 
key = 'exampledir/exampleobject.txt'
# アップロードするローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。 
filename = 'D:\\localpath\\examplefile.txt'

total_size = os.path.getsize(filename)
# determine_part_size メソッドを使用してパートサイズを決定します。 
part_size = determine_part_size(total_size, preferred_size=100 * 1024)

# マルチパートアップロードタスクを開始します。 
upload_id = bucket.init_multipart_upload(key).upload_id
parts = []

# headers パラメーターを設定して、帯域幅制限を 100 KB/s (819,200 bit/s) に設定します。 
limit_speed = (100 * 1024 * 8)
headers = dict()
headers[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# パートを 1 つずつアップロードします。 
with open(filename, 'rb') as fileobj:
    part_number = 1
    offset = 0
    while offset < total_size:
        num_to_upload = min(part_size, total_size - offset)
        # SizedFileAdapter(fileobj, size) メソッドを呼び出して新しいオブジェクトを生成し、追加操作が開始される位置を再計算します。 
        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

# マルチパートアップロードタスクを完了します。 
# 次のコードは、マルチパートアップロードタスクを完了するときにヘッダーを設定する方法の例を示しています: 
headers = dict()
# オブジェクトのアクセス制御リスト (ACL) を指定します。この例では、このパラメーターは OBJECT_ACL_PRIVATE に設定されており、オブジェクトの ACL が非公開であることを示します。 
# 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)

# マルチパートアップロードタスクの結果を検証します。 
with open(filename, 'rb') as fileobj:
    assert bucket.get_object(key).read() == fileobj.read()

ファイル URL を使用した帯域幅の調整

公開読み取りまたは公開読み書き権限を持つファイルの場合、ファイル URL に調整パラメーター x-oss-traffic-limit=<value> を追加してアクセスを調整できます。たとえば、URL https://examplebucket.oss-cn-hangzhou.aliyuncs.com/video.mp4?x-oss-traffic-limit=819200 は、video.mp4 ファイルのダウンロード速度が 100 KB/s に調整されることを指定します。次の図は、調整の効果を示しています:video

署名付き URL を使用した帯域幅の調整

SDK を使用して署名付き URL を生成し、非公開ファイルにアクセスする場合、署名計算に調整パラメーターを含める必要があります。次のコードは、一般的な SDK を使用して署名付き URL に調整パラメーターを追加する方法の例を示しています。他の SDK を使用したコード例については、「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 {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。実際のエンドポイントを指定してください。 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例: examplebucket。 
        String bucketName = "examplebucket";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 
        String objectName = "exampledir/exampleobject.txt";

        // アップロードするローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。 
        // ローカルファイルのパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。 
        String localFileName = "D:\\localpath\\examplefile.txt";

        // オブジェクトをダウンロードする完全なパスを指定します。同じ名前のファイルが既に存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。それ以外の場合、ダウンロードされたオブジェクトはパスに保存されます。 
        // ダウンロードしたオブジェクトのパスを指定しない場合、ダウンロードしたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。 
        String downLoadFileName = "D:\\localpath\\exampleobject.txt";

        // 帯域幅制限を 100 KB/s に設定します。 
        int limitSpeed = 100 * 1024 * 8;
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。 
        String region = "cn-hangzhou";

        // OSS Client インスタンスを作成します。 
        // OSS Client が不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // オブジェクトのアップロード用に帯域幅調整パラメーターを含む署名付き URL を生成し、URL の有効期間を 60 秒に設定します。 
            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);

            // オブジェクトのアップロードの帯域幅調整を設定します。 
            InputStream inputStream = new FileInputStream(localFileName);
            ossClient.putObject(signedUrl, inputStream, -1, null, true);

            // オブジェクトのダウンロード用に帯域幅調整パラメーターを含む署名付き URL を生成し、URL の有効期間を 60 秒に設定します。 
            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);

            // オブジェクトのダウンロードの帯域幅調整を設定します。 
            GetObjectRequest getObjectRequest =  new GetObjectRequest(signedUrl, null);
            ossClient.getObject(getObjectRequest, new File(downLoadFileName));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + 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;

// 環境変数からアクセス資格情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$provider = new EnvironmentVariableCredentialsProvider();
// yourEndpoint を、バケットが配置されているリージョンのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// バケット名を指定します。例: examplebucket。
$bucket= "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。完全なパスにバケット名を含めることはできません。
$object = "exampledir/exampleobject.txt";

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

// 帯域幅を 100 KB/s (819200 bit/s) に調整します。
$options = array(
        OssClient::OSS_TRAFFIC_LIMIT => 819200,
);

// 調整されたアップロード用の署名付き URL を作成します。URL は 60 秒間有効です。
$timeout = 60;
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "PUT", $options);
print($signedUrl);

// 調整されたダウンロード用の署名付き URL を作成します。URL は 120 秒間有効です。
$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

# 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# エンドポイントにマッピングされるリージョンの ID を指定します。例: cn-hangzhou。このパラメーターは、署名アルゴリズム V4 を使用する場合に必要です。
region = "cn-hangzhou"

# バケットの名前を指定します。 
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 
object_name = 'exampledir/exampleobject.txt'
# アップロードするローカルファイルの完全なパスを指定します。例: D:\\localpath\\examplefile.txt。デフォルトでは、ローカルファイルのパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。 
local_file_name = 'D:\\localpath\\examplefile.txt'
# オブジェクトをダウンロードするローカルパスを指定します。同じ名前のファイルが既に存在する場合、ダウンロードされたオブジェクトはファイルを上書きします。同じ名前のファイルが存在しない場合、ダウンロードされたオブジェクトはパスに保存されます。 
# ダウンロードしたオブジェクトのパスを指定しない場合、ダウンロードしたオブジェクトはサンプルプログラムが属するプロジェクトのパスに保存されます。 
down_file_name = 'D:\\localpath\\exampleobject.txt'

# params パラメーターを設定して、帯域幅制限を 100 KB/s (819,200 bit/s) に設定します。 
limit_speed = (100 * 1024 * 8)
params = dict()
params[OSS_TRAFFIC_LIMIT] = str(limit_speed)

# オブジェクトのアップロード用に帯域幅調整パラメーターを含む署名付き URL を生成し、URL の有効期間を 60 秒に設定します。 
url = bucket.sign_url('PUT', object_name, 60, params=params)
print('put object url:', url)

# オブジェクトのアップロードの帯域幅調整を設定します。 
result = bucket.put_object_with_url_from_file(url, local_file_name)
print('http response status:', result.status)

# オブジェクトのダウンロード用に帯域幅調整パラメーターを含む署名付き URL を生成し、URL の有効期間を 60 秒に設定します。 
url = bucket.sign_url('GET', object_name, 60, params=params)
print('get object url:', url)

# オブジェクトのダウンロードの帯域幅調整を設定します。 
result = bucket.get_object_with_url_to_file(url, down_file_name)
print('http response status:', result.status)
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 
var endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// バケットの名前を指定します。例: examplebucket。 
var bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 
var objectName = "exampledir/exampleobject.txt";
var objectContent = "More than just cloud.";
var downloadFilename  = "D:\\localpath\\examplefile.txt";
// バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。
const string region = "cn-hangzhou";
            
// ClientConfiguration インスタンスを作成し、必要に応じてパラメーターを変更します。
 var conf = new ClientConfiguration();
            
// 署名アルゴリズム V4 を使用します。
conf.SignatureVersion = SignatureVersion.V4;
            
// OSSClient インスタンスを作成します。
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
client.SetRegion(region);
try
{       
    // オブジェクトをアップロードするための署名付き URL を生成します。 
    var generatePresignedUriRequest = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Put)
    {
        Expiration = DateTime.Now.AddHours(1),
    };

    // 帯域幅制限を 100 KB/s (819,200 bit/s) に設定します。 
    generatePresignedUriRequest.AddQueryParam("x-oss-traffic-limit", "819200");

    var signedUrl = client.GeneratePresignedUri(generatePresignedUriRequest);
    // 署名付き URL を使用してオブジェクトをアップロードします。 
    var buffer = Encoding.UTF8.GetBytes(objectContent);
    using (var ms = new MemoryStream(buffer))
    {
        client.PutObject(signedUrl, ms);
    }
    Console.WriteLine("Put object by signatrue succeeded. {0} ", signedUrl.ToString());


    var metadata = client.GetObjectMetadata(bucketName, objectName);
    var etag = metadata.ETag;
    // オブジェクトをダウンロードするための署名付き URL を生成します。 
    // 帯域幅制限を 100 KB/s (819,200 bit/s) に設定します。 
    var req = new GeneratePresignedUriRequest(bucketName, objectName, SignHttpMethod.Get);
    req.AddQueryParam("x-oss-traffic-limit", "819200");

    var uri = client.GeneratePresignedUri(req);
    // 署名付き URL を使用してオブジェクトをダウンロードします。 
    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("Get object by signatrue succeeded. {0} ", uri.ToString());
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}
#include <alibabacloud/oss/OssClient.h>
#include <fstream>
using namespace AlibabaCloud::OSS;
int main(void)
{
    /* OSS へのアクセスに使用されるアカウントに関する情報を初期化します。 */
    
    /* バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 */
    std::string Endpoint = "yourEndpoint";
    /*バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合は、リージョンを cn-hangzhou に設定します。*/
    std::string Region = "yourRegion";
    /* バケットの名前を指定します。例: examplebucket。 */
    std::string BucketName = "examplebucket";
    /* オブジェクトの完全なパスを指定します。オブジェクトの完全なパスにバケット名を含めないでください。例: exampledir/exampleobject.txt。 */
    std::string ObjectName = "exampledir/exampleobject.txt"; 

    /* ネットワークリソースなどのリソースを初期化します。 */
    InitializeSdk();

    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* 環境変数からアクセス資格情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* 署名付き URL の有効期間を 32,400 秒に設定します。 */
    std::time_t expires = std::time(nullptr) + 1200; 
    /* オブジェクトのアップロードに使用される署名付き URL を生成します。 */
    GeneratePresignedUrlRequest putrequest(BucketName, ObjectName, Http::Put);
    putrequest.setExpires(expires);
    /* オブジェクトをアップロードする最大速度を 100 KB/s に設定します。 */
    putrequest.setTrafficLimit(819200);
    auto genOutcome = client.GeneratePresignedUrl(putrequest);
    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "test cpp sdk";
    /* 署名付きアップロード URL を表示します。 */
    std::cout << "Signed upload URL:" << genOutcome.result() << std::endl;

    /* 署名付き URL を使用してオブジェクトをアップロードします。 */
    auto outcome = client.PutObjectByUrl(genOutcome.result(), content);
    /* オブジェクトのダウンロードに使用される署名付き URL を生成します。 */
    GeneratePresignedUrlRequest getrequest(BucketName, ObjectName, Http::Get);
    getrequest.setExpires(expires);
    /* オブジェクトをダウンロードする最大速度を 100 KB/s に設定します。 */
    getrequest.setTrafficLimit(819200);
    genOutcome = client.GeneratePresignedUrl(getrequest);
    /* 署名付きダウンロード URL を表示します。 */
    std::cout << "Signed download URL:" << genOutcome.result() << std::endl;
    /* 署名付き URL を使用してオブジェクトをダウンロードします。 */
    auto goutcome = client.GetObjectByUrl(genOutcome.result());
    
    /* ネットワークリソースなどのリソースを解放します。 */
    ShutdownSdk();
    return 0;
}