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

Object Storage Service:Simple upload

最終更新日:Sep 09, 2026

高い同時実行性が要求されない場合に、最大 5 GB のオブジェクトを Object Storage Service (OSS) にアップロードするには、シンプルアップロードを使用します。

警告

OSS-HDFS サービスが有効になっているバケットでは、OSS-HDFS サービス自体以外の方法でデータストレージディレクトリ .dlsdata/ にオブジェクトをアップロードしないでください。アップロードすると、サービスが誤動作したり、データが損失したりする可能性があります。

アップロード方法

開始する前に、バケットを作成します。

重要

コンプライアンスとセキュリティを向上させるためのポリシーの変更により、2025 年 3 月 20 日より、新規 OSS ユーザーが中国本土リージョンにある OSS バケットでデータ API オペレーションを実行する場合、カスタムドメイン名を使用する (CNAME) 必要があります。これらの操作では、デフォルトのパブリックエンドポイントは制限されます。影響を受ける操作の完全なリストについては、公式発表をご参照ください。HTTPS 経由でデータにアクセスする場合は、カスタムドメインに有効な SSL 証明書をバインドする必要があります。コンソールでは HTTPS が強制されるため、これはOSS コンソールへのアクセスには必須です。

OSS コンソール

  1. OSS コンソールにログインします。

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。表示されたページで、対象のバケット名をクリックします。

  3. 左側のナビゲーションウィンドウで、オブジェクト管理 > オブジェクト を選択します。

  4. オブジェクト ページで、アップロード をクリックします。

  5. アップロード パネルで、アップロードするファイルまたはフォルダーを選択します。

    1. 任意:基本オプションを設定します。

      基本オプション

      パラメーター

      説明

      [アップロード先]

      バケット内の宛先パスを設定します。

      • カレントディレクトリ:オブジェクトを現在のディレクトリにアップロードします。

      • ディレクトリを指定する:指定されたディレクトリにアップロードします。ディレクトリ名を入力する必要があります。ディレクトリが存在しない場合、OSS は自動的に作成します。

        ディレクトリ名は、次の要件を満たす必要があります:

        • 名前は 1~254 文字の長さで、UTF-8 エンコーディングを使用する必要があります。

        • 名前はスラッシュ (/) またはバックスラッシュ (\) で始めることはできません。

        • 名前に連続するスラッシュ (/) を含めることはできません。

        • 名前を .. にすることはできません。

      ファイル ACL

      オブジェクト ACL を設定します。

      • バケットから継承:オブジェクトはバケットの ACL を継承します。

      • 非公開 (推奨):オブジェクトの所有者のみがオブジェクトに対する読み取りおよび書き込み権限を持ちます。

      • 公開読み取り:オブジェクトの所有者は読み取りおよび書き込み権限を持ち、匿名ユーザーを含む他のユーザーは読み取り専用アクセス権を持ちます。これにより、データ漏えいや料金の増加が発生する可能性があります。このオプションは注意して使用してください。

      • 公開読み書き:匿名ユーザーを含むすべてのユーザーがオブジェクトを読み書きできます。これにより、データ漏えいや料金の増加が発生する可能性があります。悪意のあるユーザーが違法な情報をアップロードした場合、法的責任を問われる可能性があります。必要な場合を除き、このオプションを選択しないでください。

      オブジェクト ACL。

      アップロードするファイル

      アップロードするファイルまたはフォルダーを選択します。

      ファイルの選択 または フォルダーの選択 をクリックして、ローカルファイルまたはフォルダーを選択します。対象のファイルやフォルダーをアップロードエリアにドラッグすることもできます。

      ファイルをアップロードから除外するには、その横にある 削除 をクリックします。

      重要
      • バージョン管理が無効になっているバケットに既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、アップロードによって既存のオブジェクトが上書きされます。

      • バージョン管理が有効になっているバケットに既存のオブジェクトと同じ名前のオブジェクトをアップロードすると、アップロードされたオブジェクトが現在のバージョンになり、既存のオブジェクトは以前のバージョンになります。

    2. 任意: ストレージクラスやサーバーサイド暗号化方式などの詳細オプションを設定します。

      詳細オプション

      パラメーター

      説明

      ストレージクラス

      ストレージクラスを設定します。

      • バケットから継承:オブジェクトはバケットのストレージクラスを継承します。

      • スタンダード:頻繁なデータアクセスをサポートする、高い信頼性、可用性、パフォーマンスを備えたオブジェクトストレージサービスを提供します。ソーシャルアプリケーションや共有アプリケーション、大規模なウェブサイト、ビッグデータ分析など、さまざまなユースケースに適しています。標準ストレージクラスは、ゾーン冗長ストレージ (ZRS) とローカル冗長ストレージ (LRS) をサポートします。

      • [低頻度アクセス]:低いストレージコストで高い耐久性のオブジェクトストレージを提供します。最小課金サイズは 64 KB、最小保存期間は 30 日です。リアルタイムのデータアクセスをサポートします。データにアクセスするとデータ取得料金が発生します。このストレージクラスは、平均して月に 1~2 回など、アクセス頻度が低いビジネスシナリオに適しています。低頻度アクセスストレージクラスは ZRS と LRS をサポートします。

      • [アーカイブストレージ]:非常に低いストレージコストで高い耐久性のオブジェクトストレージを提供します。最小課金サイズは 64 KB、最小保存期間は 60 日です。アーカイブストレージのデータは、解凍後にアクセスするか、直接アクセスできます。解凍されたデータにはデータ取得料金が発生し、直接アクセスされたデータにはリアルタイムアクセス料金が発生します。アーカイブストレージは、アーカイブ、医療画像、科学データ、ビデオ映像などの長期的なデータ保持に適しています。アーカイブストレージクラスは ZRS と LRS をサポートします。

      • コールドアーカイブ: アーカイブストレージよりも低コストで、耐久性の高いオブジェクトストレージを提供します。最小課金サイズは 64 KB、最小保存期間は 180 日です。アクセスする前にデータを解凍する必要があります。解凍時間は、データサイズと選択した解凍モードによって異なります。解凍には、データ取得料金とリクエスト料金が発生します。このストレージクラスは、コンプライアンスのために保持されるデータ、ビッグデータや人工知能 (AI) の分野で蓄積された生データ、映画・テレビ業界のメディアアセット、オンライン教育業界のアーカイブ動画など、非常に長期間の保存が必要なコールドデータに適しています。コールドアーカイブストレージクラスは LRS のみをサポートします。

      • [ディープコールドアーカイブストレージ]:コールドアーカイブストレージよりも低いコストで高い耐久性のオブジェクトストレージを提供します。最小課金サイズは 64 KB、最小保存期間は 180 日です。データはアクセス前に解凍する必要があります。解凍時間はデータサイズと選択した解凍モードによって異なります。解凍にはデータ取得料金とリクエスト料金が発生します。このストレージクラスは、ビッグデータや AI 分野での生データの長期保持、メディアデータの長期保持、規制およびコンプライアンスアーカイブ、テープの置き換えなど、超長期の保存が必要な極めてコールドなデータに適しています。ディープコールドアーカイブストレージクラスは LRS のみをサポートします。

      ストレージクラスの概要。

      暗号化の方法

      サーバーサイド暗号化方式を設定します。

      • バケットから継承:オブジェクトはバケットのサーバーサイド暗号化方式を継承します。

      • [SSE-OSS]:OSS マネージドキーを使用して暗号化します。OSS は各オブジェクトを暗号化するために異なるキーを使用します。さらなる保護のために、OSS はマスターキーを使用してデータ暗号化キー自体を暗号化します。

      • [KMS]:KMS が管理するデフォルトのカスタマーマスターキー (CMK) または指定された CMK ID を使用してデータを暗号化および復号します。CMK パラメーターについては、以下で説明します:

        • [alias/acs/oss(CMK ID)]:このオプションを選択すると、OSS はデフォルトのサービスキーを使用してバケット内のデータを暗号化し、バケットからオブジェクトをダウンロードするときにデータを自動的に復号します。

        • [alias/<cmkname>(CMK ID)]:このオプションを選択すると、OSS は指定されたサービスキーを使用してバケット内のデータを暗号化し、暗号化されたオブジェクトのメタデータに CMK ID を記録します。復号権限を持つユーザーがオブジェクトをダウンロードすると、オブジェクトは自動的に復号されます。<cmkname> は、キーを作成したときに指定した CMK の任意のエイリアスです。

          指定された CMK ID を使用する前に、KMS コンソールでバケットと同じリージョンに標準キーまたは外部キーを作成する必要があります。詳細については、「CMK の作成」をご参照ください。

      • 暗号化アルゴリズム:AES256 のみがサポートされています。

      ユーザー定義のメタデータ

      オブジェクトにカスタムメタデータを追加します。すべてのエントリの合計サイズは 8 KB を超えてはなりません。各キーは x-oss-meta- プレフィックスで始まり、値を割り当てる必要があります。例:[x-oss-meta-location:hangzhou]。

  6. アップロード をクリックします。

    その後、タスクのアップロード タブでオブジェクトのアップロードの進捗状況を確認できます。

ossbrowser

ossbrowser を使用してシンプルアップロードを行う前に、ossbrowser 2.0 をインストールし、ossbrowser 2.0 にログインします。

  1. 宛先バケットの名前をクリックします。

  2. アップロード をクリックし、アップロードするファイルまたはフォルダーを選択します。

    アップロードの進捗状況は右上隅で確認できます。

Alibaba Cloud SDK

完全なファイルのアップロード

ローカルファイルを指定されたバケットにアップロードします。

Java

開始する前に、アクセス認証情報を設定し、OSS SDK for Java V1 をインストールしていることを確認してください。

PutObjectRequest では、key はオブジェクトの完全な名前を指定し、例では objectName で表されます。完全なオブジェクト名には、ディレクトリプレフィックスとファイル名が含まれ、バケット名は除外され、オブジェクトの命名規則に準拠する必要があります。

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

public class Demo {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // PutObjectRequest のキーを指定します。これは完全なオブジェクト名です。バケット名を含めないでください。例:exampledir/exampleobject.txt。
        String objectName = "exampledir/exampleobject.txt";
        // アップロードするローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。
        // デフォルトでは、ローカルファイルのパスが指定されていない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。
        String filePath= "D:\\localpath\\examplefile.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";
        
        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // PutObjectRequest オブジェクトを作成します。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath));
            // 次のサンプルコードは、オブジェクトをアップロードする際にオブジェクトのストレージクラスと ACL を指定する方法の例を示しています:
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);
            
            // ローカルファイルをアップロードします。
            PutObjectResult result = ossClient.putObject(putObjectRequest);           
        } 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();
            }
        }
    }
}

Python

開始する前に、認証情報を設定し、OSS SDK for Python をインストールしていることを確認してください。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object from file sample")

# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)

# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数は任意です。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

# アップロードするローカルファイルのパスを指定する --file_path コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--file_path', help='The path of Upload file.', required=True)

def main():
    # コマンドライン引数を解析します。
    args = parser.parse_args()

    # ID 確認のために環境変数から認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードし、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider

    # 設定でリージョンを設定します。
    cfg.region = args.region

    # endpoint 引数が指定されている場合、設定でエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # ファイルから直接オブジェクトをアップロードするリクエストを実行します。
    # バケット名、オブジェクト名、およびローカルファイルのパスを指定します。
    result = client.put_object_from_file(
        oss.PutObjectRequest(
            bucket=args.bucket,  # バケットの名前。
            key=args.key         # オブジェクトの名前。
        ),
        args.file_path          # ローカルファイルのパス。
    )

    # ステータスコード、リクエスト ID、Content-MD5、ETag、64 ビット巡回冗長検査 (CRC64) ハッシュ、バージョン ID、およびサーバー応答時間を含むリクエストの結果情報を出力します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
          f' server time: {result.headers.get("x-oss-server-time")},'
    )

# スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。
if __name__ == "__main__":
    main()

Go

開始する前に、認証情報を設定し、OSS SDK for Go をインストールしていることを確認してください。

package main

import (
	"context"
	"flag"
	"log"

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

// グローバル変数を指定します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
	objectName string // オブジェクトの名前。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSSClient インスタンスを作成します。
	client := oss.NewClient(cfg)

	// アップロードするローカルファイルのパスを指定します。例:/Users/localpath/exampleobject.txt。
	localFile := "/Users/localpath/exampleobject.txt"

	// ローカルファイルをアップロードするリクエストを作成します。
	putRequest := &oss.PutObjectRequest{
		Bucket:       oss.Ptr(bucketName),      // バケットの名前を指定します。
		Key:          oss.Ptr(objectName),      // オブジェクトの名前を指定します。
		StorageClass: oss.StorageClassStandard, // オブジェクトのストレージクラスを標準に設定します。
		Acl:          oss.ObjectACLPrivate,     // オブジェクトのアクセス制御リスト (ACL) を非公開に設定します。
		Metadata: map[string]string{
			"yourMetadataKey 1": "yourMetadataValue 1", // オブジェクトのメタデータを指定します。
		},
	}

	// ローカルファイルをアップロードするリクエストを実行します。
	result, err := client.PutObjectFromFile(context.TODO(), putRequest, localFile)
	if err != nil {
		log.Fatalf("failed to put object from file %v", err)
	}

	// オブジェクトのアップロード操作の結果を表示します。
	log.Printf("put object from file result:%#v\n", result)
}

Node.js

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

const client = new OSS({
  // yourregion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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: 'examplebucket',
});

// カスタムリクエストヘッダー
const headers = {
  // オブジェクトのストレージクラスを指定します。
  'x-oss-storage-class': 'Standard',
  // オブジェクトのアクセス権限を指定します。
  'x-oss-object-acl': 'private',
  // ファイルが URL を使用してアクセスされる場合、ファイルが添付ファイルとしてダウンロードされるように指定します。ダウンロードされたファイルの名前は example.txt です。
  'Content-Disposition': 'attachment; filename="example.txt"',
  // オブジェクトにタグを設定します。複数のタグを同時に設定できます。
  'x-oss-tagging': 'Tag1=1&Tag2=2',
  // PutObject 操作中に同じ名前のオブジェクトを上書きするかどうかを指定します。このパラメーターを true に設定すると、オブジェクトが上書きされるのを防ぎます。
  'x-oss-forbid-overwrite': 'true',
};

async function put () {
  try {
    // OSS オブジェクトの完全なパスとローカルファイルの完全なパスを指定します。OSS オブジェクトの完全なパスにはバケット名を含めることはできません。
    // ローカルファイルの完全なパスにローカルパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトのローカルパスからアップロードされます。
    const result = await client.put('exampleobject.txt', path.normalize('D:\\localpath\\examplefile.txt')
    // カスタムヘッダー
    ,{headers}
    );
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

PHP

<?php

// 依存ライブラリをロードするために autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
    "file" => ['help' => 'アップロードしたいファイルのローカルパス。', 'required' => True], // (必須) ローカルファイルのパスを指定します。
];

// パラメーターの説明を getopt が要求する長いオプションリストに変換します。
// 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているか確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが設定されていない場合、プログラムを終了します。
    }
}

// 解析されたパラメーターから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。
$file = $options["file"]; // ローカルファイルのパス。

// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合はエンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// ローカルファイルが存在するか確認します。
if (!file_exists($file)) {
    echo "Error: The specified file does not exist." . PHP_EOL; // ローカルファイルが存在しない場合、エラーメッセージが表示され、プログラムが終了します。
    exit(1);
}

// ローカルファイルを開き、シンプルアップロードタスクの準備をします。
// fopen を使用してローカルファイルを読み取り専用モードで開き、Utils::streamFor を使用してファイルをストリームに変換します。
$body = Oss\Utils::streamFor(fopen($file, 'r'));

// ローカルファイルをアップロードするための PutObjectRequest オブジェクトを作成します。
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request->body = $body; // HTTP リクエストボディがファイルストリームであることを指定します。

// シンプルアップロードリクエストを実行します。
$result = $client->putObject($request);

// シンプルアップロードリクエストの結果を表示します。
// HTTP ステータスコード、リクエスト ID、およびオブジェクトの ETag を表示して、リクエストが成功したかどうかを確認します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 はリクエストが成功したことを示します。
    'request id:' . $result-> requestId. PHP_EOL . // リクエスト ID。リクエストのデバッグや追跡に使用されます。
    'etag:' . $result->etag . PHP_EOL // オブジェクトの ETag。オブジェクトのコンテンツを識別するために使用されます。
);

Browser.js

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>ドキュメント</title>
  </head>
  <body>
    <input id="file" type="file" />
    <button id="upload">オブジェクトのアップロード</button>
    <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
    <script>
      const client = new OSS({
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
        region: "yourRegion",
        authorizationV4: true,
        // STS から取得した一時的な AccessKey ペアを指定します。AccessKey ペアは、AccessKey ID と AccessKey Secret で構成されます。
        accessKeyId: "yourAccessKeyId",
        accessKeySecret: "yourAccessKeySecret",
        // STS から取得したセキュリティトークンを指定します。
        stsToken: "yourSecurityToken",
        // バケットの名前を指定します。
        bucket: "examplebucket",
      });

      // ドロップダウンリストからローカルファイルを選択します。例:<input type="file" id="file" />。
      let data;
      // Blob データを作成して指定します。
      //const data = new Blob(['Hello OSS']);
      // OSS バッファーを作成し、OSS バッファーのコンテンツを指定します。
      //const data = new OSS.Buffer(['Hello OSS']);

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

      async function putObject(data) {
        try {
          // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
          // オブジェクト名またはオブジェクトの完全なパスを指定して、現在のバケットまたはバケット内の特定のディレクトリにデータをアップロードします。たとえば、オブジェクト名を exampleobject.txt に設定するか、オブジェクトのパスを exampledir/exampleobject.txt に設定します。
          // データは、ファイル、Blob データ、または OSS バッファーに設定できます。
          const options = {
            meta: { temp: "demo" },
            mime: "json",
            headers: { "Content-Type": "text/plain" },
          };
          const result = await client.put("examplefile.txt", data, options);
          console.log(result);
        } catch (e) {
          console.log(e);
        }
      }

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

.NET

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

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、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 localFilename = "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
{
    // ローカルファイルをアップロードします。
    client.PutObject(bucketName, objectName, localFilename);
    Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}

Harmony

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

// OSS クライアントインスタンスを作成します。
const client = new Client({
  // STS 一時アクセス認証情報の Access Key ID に置き換えます。
  accessKeyId: 'yourAccessKeyId',
  // STS 一時アクセス認証情報の Access Key Secret に置き換えます。
  accessKeySecret: 'yourAccessKeySecret',
  // STS 一時アクセス認証情報のセキュリティトークンに置き換えます。
  securityToken: 'yourSecurityToken',
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを oss-cn-hangzhou に設定します。
  region: 'oss-cn-hangzhou',
});

const bucket = 'yourBucketName'; // 使用したいバケットの名前に置き換えます。

const key = 'yourObjectName'; // アップロードしたいオブジェクト (ファイル) の名前に置き換えます。

const putObject = async () =&gt; {
  try {
    // putObject メソッドを呼び出して、指定されたバケットとキーにデータをアップロードし、データをパラメーターとして渡します。
    const res = await client.putObject({
      bucket, // バケット名。
      key, // オブジェクト (ファイル) 名。
      data: 'hello world' // アップロードするデータ。この場合は単純な文字列。
    });

    // アップロード結果を出力します。
    console.log(JSON.stringify(res));
  } catch (err) {
    // リクエスト中に発生した例外をキャッチします。
    if (err instanceof RequestError) {
      // エラーが既知の型である場合、エラーコード、メッセージ、リクエスト ID、ステータスコード、EC コード、およびその他の情報を出力します。
      console.log('code: ', err.code);
      console.log('message: ', err.message);
      console.log('requestId: ', err.requestId);
      console.log('status: ', err.status);
      console.log('ec: ', err.ec);
    } else {
      // その他の未知の型のエラーを出力します。
      console.log('unknown error: ', err);
    }
  }
}

// putObject 関数を呼び出してアップロード操作を実行します。
putObject();

Android

// アップロードリクエストを作成します。
// バケット名 (例:examplebucket)、オブジェクトの完全なパス (例:exampledir/exampleobject.txt)、およびローカルファイルの完全なパス (例:/storage/emulated/0/oss/examplefile.txt) を指定します。
// オブジェクトの完全なパスにはバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

// ファイルメタデータの設定は任意です。
 ObjectMetadata metadata = new ObjectMetadata();
// metadata.setContentType("application/octet-stream"); // コンテンツタイプを設定します。
// metadata.setContentMD5(BinaryUtil.calculateBase64Md5(uploadFilePath)); // MD5 ハッシュを検証します。
// オブジェクトのアクセス権限を非公開に設定します。
metadata.setHeader("x-oss-object-acl", "private");
// オブジェクトのストレージクラスを標準に設定します。
metadata.setHeader("x-oss-storage-class", "Standard");
// 同じ名前のオブジェクトの上書きを防ぎます。
// metadata.setHeader("x-oss-forbid-overwrite", "true");
// オブジェクトタグを指定します。複数のタグを指定できます。
// metadata.setHeader("x-oss-tagging", "a:1");
// OSS が宛先オブジェクトを作成するために使用するサーバーサイド暗号化アルゴリズムを指定します。
// metadata.setHeader("x-oss-server-side-encryption", "AES256");
// KMS によって管理されるカスタマーマスターキー (CMK) を指定します。このパラメーターは、x-oss-server-side-encryption が KMS に設定されている場合にのみ有効です。
// metadata.setHeader("x-oss-server-side-encryption-key-id", "9468da86-3509-4f8d-a61e-6eab1eac****");

put.setMetadata(metadata);

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

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // クライアント例外、ネットワーク例外など。
    e.printStackTrace();
} catch (ServiceException e) {
    // サーバー例外。
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

iOS

OSSPutObjectRequest * put = [OSSPutObjectRequest new];

// バケット名を指定します。例:examplebucket。
put.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。例:exampledir/exampleobject.txt。完全なパスにはバケット名を含めることはできません。
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// put.uploadingData = <NSData *>; // NSData を直接アップロードします。

// (任意) アップロードの進捗を設定します。
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    // 現在のアップロード長、合計アップロード長、およびアップロードする合計長。
    NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
// 任意のフィールドを設定します。
// put.contentType = @"application/octet-stream";
// Content-MD5 を設定します。
// put.contentMd5 = @"eB5eJF1ptWaXm4bijSPyxw==";
// オブジェクトのコーデックを設定します。
// put.contentEncoding = @"identity";
// オブジェクトの表示形式を設定します。
// put.contentDisposition = @"attachment";
// ファイルをアップロードする際に、オブジェクトのメタデータや HTTP ヘッダーを設定できます。
// NSMutableDictionary *meta = [NSMutableDictionary dictionary];
// ファイルのメタデータを設定します。
// [meta setObject:@"value" forKey:@"x-oss-meta-name1"];
// オブジェクトのアクセス権限を非公開に設定します。
// [meta setObject:@"private" forKey:@"x-oss-object-acl"];
// オブジェクトのストレージクラスを標準に設定します。
// [meta setObject:@"Standard" forKey:@"x-oss-storage-class"];
// 同じ名前の宛先オブジェクトを上書きします。
// [meta setObject:@"true" forKey:@"x-oss-forbid-overwrite"];
// オブジェクトタグを指定します。複数のタグを指定できます。
// [meta setObject:@"a:1" forKey:@"x-oss-tagging"];
// OSS が宛先オブジェクトを作成するために使用するサーバーサイド暗号化アルゴリズムを指定します。
// [meta setObject:@"AES256" forKey:@"x-oss-server-side-encryption"];
// KMS によって管理されるカスタマーマスターキー (CMK)。このパラメーターは、x-oss-server-side-encryption が KMS に設定されている場合にのみ有効です。
// [meta setObject:@"9468da86-3509-4f8d-a61e-6eab1eac****" forKey:@"x-oss-server-side-encryption-key-id"];
// put.objectMeta = meta;
OSSTask * putTask = [client putObject:put];

[putTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"upload object success!");
    } else {
        NSLog(@"upload object failed, error: %@" , task.error);
    }
    return nil;
}];
// waitUntilFinished は現在のスレッドをブロックしますが、アップロードプロセスはブロックしません。
// [putTask waitUntilFinished];
// [put cancel];

C++

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

int main(void)
{
    /* OSS アカウント情報を初期化します。*/
            
    /* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
    /* ローカルファイルの完全なパスを入力します。例:D:\\localpath\\examplefile.txt。この例では、localpath は examplefile.txt ファイルが保存されているローカルディレクトリです。*/
    std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("D:\\localpath\\examplefile.txt", std::ios::in | std::ios::binary);
    PutObjectRequest request(BucketName, ObjectName, content);

    /* (任意) 次の例は、アクセス制御リスト (ACL) を非公開に、ストレージクラスを標準に設定する方法を示しています。*/
    //request.MetaData().addHeader("x-oss-object-acl", "private");
    //request.MetaData().addHeader("x-oss-storage-class", "Standard");

    auto outcome = client.PutObject(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "PutObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

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

C

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";
/* バケット名を指定します。例:examplebucket。*/
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めることはできません。例:exampledir/exampleobject.txt。*/
const char *object_name = "exampledir/exampleobject.txt";
const char *object_content = "More than just cloud.";
/* yourRegion をバケットが配置されているリージョンのリージョン ID に設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョン ID を cn-hangzhou に設定します。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* aos_string_t 型を char* 文字列で初期化します。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 次の 2 つのパラメーターを設定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME が使用されるかどうかを指定します。0 は CNAME が使用されないことを示します。*/
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを設定します。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* プログラムエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリ管理のためのメモリプールは apr_pool_t と同等です。実装コードは apr ライブラリにあります。*/
    aos_pool_t *pool;
    /* メモリプールを作成します。2 番目のパラメーターは NULL で、メモリプールが別のメモリプールから継承しないことを示します。*/
    aos_pool_create(&pool, NULL);
    /* オプションを作成して初期化します。このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル設定情報が含まれます。*/
    oss_request_options_t *oss_client_options;
    /* メモリプール内のオプションにメモリを割り当てます。*/
    oss_client_options = oss_request_options_create(pool);
    /* クライアントオプション oss_client_options を初期化します。*/
    init_options(oss_client_options);
    /* パラメーターを初期化します。*/
    aos_string_t bucket;
    aos_string_t object;
    aos_list_t buffer;
    aos_buf_t *content = NULL;
    aos_table_t *headers = NULL;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_list_init(&buffer);
    content = aos_buf_pack(oss_client_options->pool, object_content, strlen(object_content));
    aos_list_add_tail(&content->node, &buffer);
    /* ファイルをアップロードします。*/
    resp_status = oss_put_object_from_buffer(oss_client_options, &bucket, &object, &buffer, headers, &resp_headers);
    /* アップロードが成功したかどうかを確認します。*/
    if (aos_status_is_ok(resp_status)) {
        printf("put object from buffer succeeded\n");
    } else {
        printf("put object from buffer failed\n");      
    }
    /* メモリプールを解放します。これにより、リクエスト中にリソースに割り当てられたメモリが解放されます。*/
    aos_pool_destroy(pool);
    /* 割り当てられたグローバルリソースを解放します。*/
    aos_http_io_deinitialize();
    return 0;
}

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # エンドポイントを設定します。この例では中国 (杭州) リージョンを使用しています。実際のリージョンに合わせてエンドポイントを指定してください。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します。例:examplebucket。
bucket = client.get_bucket('examplebucket')
# ファイルをアップロードします。
bucket.put_object('exampleobject.txt', :file => 'D:\\localpath\\examplefile.txt')

文字列のアップロード

メモリから文字列コンテンツをオブジェクトとしてアップロードします。

Java

開始する前に、アクセス認証情報を設定し、OSS SDK for Java V1 をインストールしていることを確認してください。

PutObjectRequest では、key はオブジェクトの完全な名前を指定し、例では objectName で表されます。完全なオブジェクト名には、ディレクトリプレフィックスとファイル名が含まれ、バケット名は除外され、オブジェクトの命名規則に準拠する必要があります。

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

public class Demo {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // PutObjectRequest のキーを指定します。これは完全なオブジェクト名です。バケット名を含めないでください。例:exampledir/exampleobject.txt。
        String objectName = "exampledir/exampleobject.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";
        
        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            // アップロードする文字列を指定します。
            String content = "Hello OSS, hello world";

            // PutObjectRequest オブジェクトを作成します。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));

            // 次のサンプルコードは、オブジェクトをアップロードする際にオブジェクトのストレージクラスとアクセス制御リスト (ACL) を指定する方法の例を示しています:
            // ObjectMetadata metadata = new ObjectMetadata();
            // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
            // metadata.setObjectAcl(CannedAccessControlList.Private);
            // putObjectRequest.setMetadata(metadata);
           
            // 文字列をアップロードします。
            PutObjectResult result = ossClient.putObject(putObjectRequest);            
        } 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();
            }
        }
    }
}   

Python

開始する前に、認証情報を設定し、OSS Python SDK をインストールしていることを確認してください。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object sample")
# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数は任意です。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # ID 確認のために環境変数から認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードし、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定でリージョンを設定します。
    cfg.region = args.region
    # endpoint 引数が指定されている場合、設定でエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # アップロードする文字列を定義します。
    text_string = "Hello, OSS!"
    data = text_string.encode('utf-8')  # 文字列を UTF-8 バイト文字列にエンコードします。

    # オブジェクトをアップロードするリクエストを実行します。バケット名、オブジェクト名、およびデータコンテンツを指定します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
    ))

    # リクエスト結果のステータスコード、リクエスト ID、Content-MD5、ETag、CRC64 ハッシュ、およびバージョン ID を出力して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。

Go

開始する前に、認証情報を設定し、OSS Go SDK をインストールしていることを確認してください。

package main

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

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

// グローバル変数を指定します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
	objectName string // オブジェクトの名前。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// アップロードする文字列を指定します。
	body := strings.NewReader("hi oss")

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSSClient インスタンスを作成します。
	client := oss.NewClient(cfg)

	// ローカルファイルをアップロードするリクエストを作成します。
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		Key:    oss.Ptr(objectName), // オブジェクトの名前。
		Body:   body,                // アップロードする文字列。
	}

	// ローカルファイルをアップロードするリクエストを実行します。
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put object %v", err)
	}

	// オブジェクトのアップロード操作の結果を表示します。
	log.Printf("put object result:%#v\n", result)
}

PHP

<?php

// 依存ライブラリをロードするために autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
];

// パラメーターの説明を getopt が要求する長いオプションリストに変換します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているか確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが設定されていない場合、プログラムを終了します。
    }
}

// 解析されたパラメーターから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。

// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合はエンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// アップロードするコンテンツを指定します。
$data = 'Hello OSS';

// ローカルファイルをアップロードするための PutObjectRequest オブジェクトを作成します。
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request-> body=Oss\Utils::streamFor($data); // HTTP リクエストボディがバイナリストリームであることを指定します。

// シンプルアップロードリクエストを実行します。
$result = $client->putObject($request);

// シンプルアップロードリクエストの結果を表示します。
printf(
    'status code: %s' . PHP_EOL . // HTTP ステータスコード。
    'request id: %s' . PHP_EOL . // リクエスト ID。
    'etag: %s' . PHP_EOL, // オブジェクトの ETag。
    $result->statusCode,
    $result->requestId,
    $result->etag
);

Node.js

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

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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: 'yourbucketname',
});

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

putBuffer();

.NET

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

// バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
var endpoint = "yourEndpoint";
// 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、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);
    // オブジェクトをアップロードします。
    client.PutObject(bucketName, objectName, requestContent);
    Console.WriteLine("Put object succeeded");
}
catch (Exception ex)
{
    Console.WriteLine("Put object failed, {0}", ex.Message);
}

バイト配列のアップロード

バイト配列からバイナリデータをアップロードします。アップロード前にデータを処理する必要がある場合に便利です。

Python

開始する前に、認証情報を設定し、OSS SDK for Python をインストールしていることを確認してください。

import argparse
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object sample")
# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数は任意です。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # ID 確認のために環境変数から認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードし、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定でリージョンを設定します。
    cfg.region = args.region
    # endpoint 引数が指定されている場合、設定でエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # アップロードするデータコンテンツを定義します。
    data = b'hello world'

    # オブジェクトをアップロードするリクエストを実行します。バケット名、オブジェクト名、およびデータコンテンツを指定します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
    ))

    # リクエスト結果のステータスコード、リクエスト ID、Content-MD5、ETag、CRC64 ハッシュ、およびバージョン ID を出力して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。

Go

開始する前に、認証情報を設定し、OSS SDK for Go をインストールしていることを確認してください。

package main

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

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

// グローバル変数を指定します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
	objectName string // オブジェクトの名前。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// アップロードするバイト配列を指定します。
	body := bytes.NewReader([]byte("yourObjectValueByteArray"))

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSSClient インスタンスを作成します。
	client := oss.NewClient(cfg)

	// ローカルファイルをアップロードするリクエストを作成します。
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		Key:    oss.Ptr(objectName), // オブジェクトの名前。
		Body:   body,                // アップロードする文字列。
	}

	// ローカルファイルをアップロードするリクエストを実行します。
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put object %v", err)
	}

	// オブジェクトのアップロード操作の結果を表示します。
	log.Printf("put object result:%#v\n", result)
}

Android

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

// アップロードリクエストを作成します。
// バケット名 (例:examplebucket) とオブジェクトの完全なパス (例:exampledir/exampleobject.txt) を指定します。
// オブジェクトの完全なパスにはバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", uploadData);

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

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // クライアント例外、ネットワーク例外など。
    e.printStackTrace();
} catch (ServiceException e) {
    // サーバー例外。
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

ファイルストリームのアップロード

ローカルファイルまたはメモリからデータを読み取り、ファイルストリームを使用してアップロードします。

Java

開始する前に、アクセス認証情報を設定し、OSS SDK for Java V1 をインストールしていることを確認してください。

PutObjectRequest では、key はオブジェクトの完全な名前を指定し、例では objectName で表されます。完全なオブジェクト名には、ディレクトリプレフィックスとファイル名が含まれ、バケット名は除外され、オブジェクトの命名規則に準拠する必要があります。

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

public class Demo {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // PutObjectRequest のキーを指定します。これは完全なオブジェクト名です。バケット名を含めないでください。例:exampledir/exampleobject.txt。
        String objectName = "exampledir/exampleobject.txt";
        // アップロードするローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。
        // ローカルファイルのパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。
        String filePath= "D:\\localpath\\examplefile.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";
        
        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、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(filePath);
            // PutObjectRequest オブジェクトを作成します。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // PutObject リクエストを作成します。
            PutObjectResult result = ossClient.putObject(putObjectRequest);
        } 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();
            }
        }
    }
} 

Node.js

const OSS = require('ali-oss');
const fs = require('fs');
const client = new OSS({
  // Specify the region where the bucket is located. For example, for China (Hangzhou), set region to oss-cn-hangzhou.
  region: 'yourRegion',
  // Obtain access credentials from environment variables. Before you run this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the bucket name, for example, examplebucket.
  bucket: 'examplebucket',
});

async function putStream () {
  try {
    // By default, the SDK uses chunked encoding and sends an HTTP PUT request when you call the putStream operation.
    // Specify the full path of the local source file.
    // If you omit the local path, the file is uploaded from the script's directory.
    let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
    // Specify the full path of the object, for example, 'exampledir/exampleobject.txt'. The full path cannot contain the bucket name.
    let result = await client.putStream('exampledir/exampleobject.txt', stream);    

    // To disable chunked encoding, specify the contentLength parameter in the options.
    // let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
    // let size = fs.statSync('D:\\localpath\\examplefile.txt').size;
    // let result = await client.putStream(
    // The stream parameter can be any Readable Stream object, such as a file stream or a network stream.
    // 'exampledir/exampleobject.txt', stream, {contentLength: size}); 
    console.log(result); 
  } catch (e) {
    console.log(e)
  }
}

putStream();

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # この例では中国 (杭州) エンドポイントを使用しています。ご利用のリージョンに合わせてエンドポイントを置き換えてください。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数を設定してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# バケット名を指定します。例:examplebucket。
bucket = client.get_bucket('examplebucket')
# オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:exampleobject.txt。
bucket.put_object('exampleobject.txt') do |stream|
  100.times { |i| stream << i.to_s }
end

ネットワークストリームのアップロード

ネットワークソースからデータを直接 OSS にストリーミングし、ローカルに保存しません。

Java

開始する前に、アクセス認証情報を設定し、OSS SDK for Java V1 をインストールしていることを確認してください。

PutObjectRequest では、key はオブジェクトの完全な名前を指定し、例では objectName で表されます。完全なオブジェクト名には、ディレクトリプレフィックスとファイル名が含まれ、バケット名は除外され、オブジェクトの命名規則に準拠する必要があります。

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

public class Demo {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。実際のエンドポイントを指定してください。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // バケットの名前を指定します。例:examplebucket。
        String bucketName = "examplebucket";
        // PutObjectRequest のキーを指定します。これは完全なオブジェクト名です。バケット名を含めないでください。例:exampledir/exampleobject.txt。
        String objectName = "exampledir/exampleobject.txt";
        // ネットワークストリームの URL を指定します。
        String url = "https://www.aliyun.com/";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";
        
        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、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 URL(url).openStream();
            // PutObjectRequest オブジェクトを作成します。
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);
            // PutObject リクエストを作成します。
            PutObjectResult result = ossClient.putObject(putObjectRequest);            
        } 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();
            }
        }
    }
}             

Python

開始する前に、認証情報を設定し、OSS SDK for Python をインストールしていることを確認してください。

import argparse
import requests
import alibabacloud_oss_v2 as oss

# コマンドライン引数パーサーを作成します。
parser = argparse.ArgumentParser(description="put object sample")
# バケットが配置されているリージョンを指定する --region コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
# バケットの名前を指定する --bucket コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
# 他のサービスが OSS にアクセスするために使用できるドメイン名を指定する --endpoint コマンドライン引数を追加します。この引数は任意です。
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
# オブジェクトの名前を指定する --key コマンドライン引数を追加します。この引数は必須です。
parser.add_argument('--key', help='The name of the object.', required=True)

def main():
    args = parser.parse_args()  # コマンドライン引数を解析します。

    # ID 確認のために環境変数から認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK のデフォルト設定をロードし、認証情報プロバイダーを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    # 設定でリージョンを設定します。
    cfg.region = args.region
    # endpoint 引数が指定されている場合、設定でエンドポイントを設定します。
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 指定された設定を使用して OSS クライアントを作成します。
    client = oss.Client(cfg)

    # HTTP GET リクエストを送信してレスポンスコンテンツを取得します。
    response = requests.get('http://www.aliyun.com')

    # オブジェクトをアップロードするリクエストを実行します。バケット名、オブジェクト名、およびデータコンテンツを指定します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=response.content,
    ))

    # リクエスト結果のステータスコード、リクエスト ID、Content-MD5、ETag、CRC64 ハッシュ、およびバージョン ID を出力して、リクエストが成功したかどうかを確認します。
    print(f'status code: {result.status_code},'
          f' request id: {result.request_id},'
          f' content md5: {result.content_md5},'
          f' etag: {result.etag},'
          f' hash crc64: {result.hash_crc64},'
          f' version id: {result.version_id},'
    )

if __name__ == "__main__":
    main()  # スクリプトのエントリポイント。ファイルが直接実行されると main 関数が呼び出されます。

Go

開始する前に、認証情報を設定し、OSS SDK for Go をインストールしていることを確認してください。

package main

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

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

// グローバル変数を指定します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
	objectName string // オブジェクトの名前。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSSClient インスタンスを作成します。
	client := oss.NewClient(cfg)

	// アップロードするネットワークストリームを指定します。
	resp, err := http.Get("https://www.aliyun.com/")
	if err != nil {
		log.Fatalf("Failed to fetch URL: %v", err)
	}
	defer resp.Body.Close()

	// ローカルファイルをアップロードするリクエストを作成します。
	request := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		Key: oss.Ptr(objectName),        // オブジェクトの名前。
		Body:   io.Reader(resp.Body), // アップロードするネットワークストリーム。
	}

	// ローカルファイルをアップロードするリクエストを実行します。
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put object %v", err)
	}

	// オブジェクトのアップロード操作の結果を表示します。
	log.Printf("put object result:%#v\n", result)
}

Node.js

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

const client = new OSS({  
  // Specify the region where the bucket is located. For example, for China (Hangzhou), set region to oss-cn-hangzhou.
  region: 'yourRegion',
  // Obtain access credentials from environment variables. Before you run this code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // Specify the bucket name, for example, examplebucket.
  bucket: 'examplebucket',
});

// Specify the URL of the network stream.
const url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/en-US/20220908/cbgh/image_processing_example.jpg";
// Import the Duplex stream.
// The stream parameter can be any Readable Stream object, such as a file stream or a network stream.
const Duplex = require("stream").Duplex;
// Instantiate a Duplex stream.
let stream = new Duplex();

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

    client
      // Specify the full path of the object, for example, 'example.png'. The full path cannot contain the bucket name.
      .putStream("example.png", stream)
      .then((r) => console.log(r))
      .catch((e) => console.log(e));
  }
});

PHP

<?php

// 依存ライブラリをロードするために autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
];

// パラメーターの説明を getopt が要求する長いオプションリストに変換します。
$longopts = \array_map(function ($key) {
    return "$key:"; // 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているか確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが設定されていない場合、プログラムを終了します。
    }
}

// 解析されたパラメーターから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。

// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合はエンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// ネットワークファイルのコンテンツをクエリします。
$url = 'https://www.aliyun.com/';
$response = file_get_contents($url);

// ローカルファイルをアップロードするための PutObjectRequest オブジェクトを作成します。
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request->body = Oss\Utils::streamFor($response); // HTTP リクエストボディがバイナリストリームであることを指定します。

// シンプルアップロードリクエストを実行します。
$result = $client->putObject($request);

// シンプルアップロードリクエストの結果を表示します。
printf(
    'status code: %s' . PHP_EOL . // HTTP ステータスコード。
    'request id: %s' . PHP_EOL . // リクエスト ID。
    'etag: %s' . PHP_EOL, // オブジェクトの ETag。
    $result->statusCode,
    $result->requestId,
    $result->etag
);

アップロードプログレスバー

アップロードの進捗をリアルタイムで追跡します。

Java

開始する前に、アクセス認証情報を設定し、OSS SDK for Java V1 をインストールしていることを確認してください。

Java アップロードプログレスバー。

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

// ProgressListener メソッドを使用してプログレスバーを使用します。
public class PutObjectProgressListenerDemo implements ProgressListener {
    private long bytesWritten = 0;
    private long totalBytes = -1;
    private boolean succeed = false;

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントが使用されます。実際のエンドポイントを指定してください。
        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 pathName = "D:\\localpath\\examplefile.txt";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

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

        try {
            // オブジェクトをアップロードする際にプログレスバーのパラメーターを指定します。この例では、PutObjectProgressListenerDemo は呼び出したいクラスの名前を指定します。実際のクラス名に置き換えてください。
            ossClient.putObject(new PutObjectRequest(bucketName,objectName, new File(pathName)).
                    <PutObjectRequest>withProgressListener(new PutObjectProgressListenerDemo()));
            // オブジェクトをダウンロードする際にプログレスバーのパラメーターを指定します。この例では、GetObjectProgressListenerDemo は呼び出したいクラスの名前を指定します。実際のクラス名に置き換えてください。
//            ossClient.getObject(new GetObjectRequest(bucketName,objectName).
//                    <GetObjectRequest>withProgressListener(new GetObjectProgressListenerDemo()));

        } 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();
            }
        }
    }

    public boolean isSucceed() {
        return succeed;
    }

    // プログレスバーを使用するためにコールバックメソッドを書き換えます。次のサンプルコードは例を示しています:
    @Override
    public void progressChanged(ProgressEvent progressEvent) {
        long bytes = progressEvent.getBytes();
        ProgressEventType eventType = progressEvent.getEventType();
        switch (eventType) {
            case TRANSFER_STARTED_EVENT:
                System.out.println("Start to upload......");
                break;
            case REQUEST_CONTENT_LENGTH_EVENT:
                this.totalBytes = bytes;
                System.out.println(this.totalBytes + " bytes in total will be uploaded to OSS");
                break;
            case REQUEST_BYTE_TRANSFER_EVENT:
                this.bytesWritten += bytes;
                if (this.totalBytes != -1) {
                    int percent = (int)(this.bytesWritten * 100.0 / this.totalBytes);
                    System.out.println(bytes + " bytes have been written at this time, upload progress: " + percent + "%(" + this.bytesWritten + "/" + this.totalBytes + ")");
                } else {
                    System.out.println(bytes + " bytes have been written at this time, upload ratio: unknown" + "(" + this.bytesWritten + "/...)");
                }
                break;
            case TRANSFER_COMPLETED_EVENT:
                this.succeed = true;
                System.out.println("Succeed to upload, " + this.bytesWritten + " bytes have been transferred in total");
                break;
            case TRANSFER_FAILED_EVENT:
                System.out.println("Failed to upload, " + this.bytesWritten + " bytes have been transferred");
                break;
            default:
                break;
        }
    }
}

Go

開始する前に、認証情報を設定し、OSS SDK for Go をインストールしていることを確認してください。

package main

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

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

// グローバル変数を指定します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
	objectName string // オブジェクトの名前。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSSClient インスタンスを作成します。
	client := oss.NewClient(cfg)

	// アップロードするローカルファイルのパスを指定します。例:/Users/localpath/exampleobject.txt。
	localFile := "/Users/localpath/exampleobject.txt"

	// ローカルファイルをアップロードするリクエストを作成します。
	putRequest := &oss.PutObjectRequest{
		Bucket: oss.Ptr(bucketName), // バケットの名前。
		Key:    oss.Ptr(objectName), // オブジェクトの名前。
		ProgressFn: func(increment, transferred, total int64) {
			fmt.Printf("increment:%v, transferred:%v, total:%v\n", increment, transferred, total)
		}, // アップロードの進捗をクエリするために使用される進捗コールバック関数を指定します。
	}

	// ローカルファイルをアップロードするリクエストを実行します。
	result, err := client.PutObjectFromFile(context.TODO(), putRequest, localFile)
	if err != nil {
		log.Fatalf("failed to put object from file %v", err)
	}

	// オブジェクトのアップロード操作の結果を表示します。
	log.Printf("put object from file result:%#v\n", result)
}

PHP

<?php

// 依存ライブラリをロードするために autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
];

// パラメーターの説明を getopt が要求する長いオプションリストに変換します。
// 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているか確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help";
        exit(1); // 必須パラメーターが設定されていない場合、プログラムを終了します。
    }
}

// 解析されたパラメーターから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。

// EnvironmentVariableCredentialsProvider 変数からアクセス認証情報を取得します。
// ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が正しく設定されていることを確認してください。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定をロードします。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。

// endpoint パラメーターが指定されている場合、カスタムドメイン名を指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]);
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// アップロードするデータコンテンツを指定します。
$data = 'Hello OSS';

// PutObjectRequest リクエストを作成し、リクエストにバケット名とオブジェクト名を指定します。
$request = new Oss\Models\PutObjectRequest($bucket, $key);

// データコンテンツをストリームオブジェクトに変換します。
$request->body = Oss\Utils::streamFor($data);

// アップロード進捗コールバック関数を指定します。
$request->progressFn = function (int $increment, int $transferred, int $total) {
    echo sprint("Uploaded:%d" . PHP_EOL, $transferred); // アップロードされたバイト数。
    echo sprint("This upload:%d" . PHP_EOL, $increment); // アップロードされた増分バイト数。
    echo sprint("Total data:%d" . PHP_EOL, $total); // 合計オブジェクトのサイズ。
    echo '-------------------------------------------'. PHP_EOL; // 点線区切り文字。
};

// putObject メソッドを使用してローカルファイルをアップロードします。
$result = $client->putObject($request);

// シンプルアップロードリクエストの結果を表示します。
printf(
    'status code: %s' . PHP_EOL, $result->statusCode . // 返された HTTP ステータスコード。
    'request id: %s' . PHP_EOL, $result->requestId . // リクエスト ID。
    'etag: %s' . PHP_EOL, $result->etag // オブジェクトの ETag。
);

.NET

using System;
using System.IO;
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
namespace PutObjectProgress
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.PutObjectProgress();
            Console.ReadKey();
        }
        public static void PutObjectProgress()
        {
            // バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
            var endpoint = "yourEndpoint";
            // 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
            var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
            // バケットの名前を指定します。
            var bucketName = "yourBucketName";
            // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。
            var objectName = "yourObjectName";
            // アップロードするローカルファイルの完全なパスを指定します。この例では、パスは D:\\localpath\\examplefile.txt に設定されています。ローカルの examplefile.txt という名前のファイルは D:\\localpath ディレクトリに保存されています。
            var localFilename = "yourLocalFilename";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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
            {
                using (var fs = File.Open(localFilename, FileMode.Open))
                {
                    var putObjectRequest = new PutObjectRequest(bucketName, objectName, fs);
                    putObjectRequest.StreamTransferProgress += streamProgressCallback;
                    client.PutObject(putObjectRequest);
                }
                Console.WriteLine("Put object:{0} succeeded", objectName);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID: {2}\tHostID: {3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
        // アップロードタスクの進捗を取得します。
        private static void streamProgressCallback(object sender, StreamTransferProgressArgs args)
        {
            System.Console.WriteLine("ProgressCallback - Progress: {0}%, TotalBytes:{1}, TransferredBytes:{2} ",
                args.TransferredBytes * 100 / args.TotalBytes, args.TotalBytes, args.TransferredBytes);
        }
    }
}

Android

// アップロードリクエストを作成します。
// バケット名 (例:examplebucket)、オブジェクトの完全なパス (例:exampledir/exampleobject.txt)、およびローカルファイルの完全なパス (例:/storage/emulated/0/oss/examplefile.txt) を指定します。
// オブジェクトの完全なパスにバケット名を含めないでください。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

// プログレスバーを表示するために進捗コールバック関数を設定します。
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
    @Override
    public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
        // currentSize はアップロードされた部分のサイズです。単位:バイト。
        // totalSize はアップロードするファイルの合計サイズです。単位:バイト。
        Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});

// ファイルを非同期でアップロードします。
OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>>() {
    @Override
    public void onSuccess(PutObjectRequest request, PutObjectResult result) {
        Log.d("PutObject", "UploadSuccess");
        Log.d("ETag", result.getETag());
        Log.d("RequestId", result.getRequestId());
    }

    @Override
    public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // リクエスト例外。
        if (clientExcepion != null) {
            // クライアント例外、ネットワーク例外など。
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // サービス例外。
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});
// task.cancel(); // タスクをキャンセルします。
// task.waitUntilFinished(); // タスクが完了するのを待ちます。

C++

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

void ProgressCallback(size_t increment, int64_t transfered, int64_t total, void* userData)
{
    // increment: このコールバックで送信されたデータのサイズ。
    // transfered: アップロードされたデータのサイズ。
    // total: アップロードするファイルの合計サイズ。
    std::cout << "ProgressCallback[" << userData << "] => " <<
    increment <<" ," << transfered << "," << total << std::endl;
}


int main(void)
{
    /* OSS アカウント情報を初期化します。*/
            
    /* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
    std::string Endpoint = "yourEndpoint";
    /* yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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);
  
    /* yourLocalFilename をローカルファイルの完全なパスに設定します。*/
    std::shared_ptr<std::iostream> content = std::make_shared<std::fstream>("yourLocalFilename", std::ios::in|std::ios::binary);
    PutObjectRequest request(BucketName, ObjectName, content);
  
    TransferProgress progressCallback = { ProgressCallback , nullptr };
    request.setTransferProgress(progressCallback);
   
    /* ファイルをアップロードします。*/
    auto outcome = client.PutObject(request);

    if (!outcome.isSuccess()) {
        /* 例外を処理します。*/
        std::cout << "PutObject fail" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

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

iOS

OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// バケットの名前を指定します。例:examplebucket。
put.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:exampledir/exampleobject.txt。
put.objectKey = @"exampledir/exampleobject.txt";
// アップロードするローカルファイルの完全なパスを指定します。
// デフォルトでは、ローカルファイルの完全なパスを指定しない場合、ローカルファイルはサンプルプログラムが属するプロジェクトのパスからアップロードされます。
put.uploadingFileURL = [NSURL fileURLWithPath:@"filePath"];
// プログレスバーを表示するために進捗コールバック関数を設定します。
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    // アップロード中のバイト数、アップロードされた合計バイト数、およびアップロードしたい合計バイト数を指定します。
    NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"upload object success!");
    } else {
        NSLog(@"upload object failed, error: %@" , task.error);
    }
    return nil;
}];
// タスクが完了するのを待つために同期ブロッキングを実装します。
// [putTask waitUntilFinished]; 

C

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに置き換えます。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";

/* バケット名に置き換えます。例:examplebucket。*/
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスに置き換えます。完全なパスにはバケット名を含めることはできません。例:exampledir/exampleobject.txt。*/
const char *object_name = "exampledir/exampleobject.txt";
/* ローカルファイルの完全なパスに置き換えます。*/
const char *local_filename = "yourLocalFilename";
/* yourRegion をバケットが配置されているリージョンの ID に置き換えます。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョン ID を cn-hangzhou に設定します。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* aos_string_t 型を char* 文字列で初期化します。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/    
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 次の 2 つのパラメーターを設定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME を使用するかどうかを指定します。0 は CNAME が使用されないことを示します。*/
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを設定します。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
void percentage(int64_t consumed_bytes, int64_t total_bytes) 
{
    assert(total_bytes >= consumed_bytes);
    printf("%%%" APR_INT64_T_FMT "\n", consumed_bytes * 100 / total_bytes);
}
int main(int argc, char *argv[])
{
    /* プログラムエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* メモリプール (pool) はメモリ管理に使用され、apr_pool_t と同等です。実装コードは apr ライブラリにあります。*/
    aos_pool_t *pool;
    /* 新しいメモリプールを作成します。2 番目のパラメーターは NULL で、新しいメモリプールが別のメモリプールから継承しないことを示します。*/
    aos_pool_create(&pool, NULL);
    /* オプションを作成して初期化します。このパラメーターには、endpoint、access_key_id、access_key_secret、is_cname、curl などのグローバル設定が含まれます。*/
    oss_request_options_t *oss_client_options;
    /* メモリプール内のオプションにメモリを割り当てます。*/
    oss_client_options = oss_request_options_create(pool);
    /* クライアントオプション oss_client_options を初期化します。*/
    init_options(oss_client_options);
    /* パラメーターを初期化します。*/
    aos_string_t bucket;
    aos_string_t object;
    aos_string_t file;   
    aos_list_t resp_body;
    aos_table_t *resp_headers = NULL;
    aos_status_t *resp_status = NULL; 
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_str_set(&file, local_filename);
    /* プログレスバー付きでアップロードします。*/
    resp_status = oss_do_put_object_from_file(oss_client_options, &bucket, &object, &file, NULL, NULL, percentage, &resp_headers, &resp_body);
    if (aos_status_is_ok(resp_status)) {
        printf("put object from file succeeded\n");
    } else {
        printf("put object from file failed\n");
    }
    /* メモリプールを解放します。これにより、リクエスト中にさまざまなリソースに割り当てられたメモリが解放されます。*/
    aos_pool_destroy(pool);
    /* 以前に割り当てられたグローバルリソースを解放します。*/
    aos_http_io_deinitialize();
    return 0;
}

アップロードコールバック

アップロード後、コールバックを使用してアプリケーションサーバーに通知し、さらなる処理を行います。コールバック。

Java

開始する前に、アクセス認証情報を設定し、OSS Java SDK V1 をインストールしていることを確認してください。

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

import java.io.ByteArrayInputStream;

public class Demo {

    public static void main(String[] args) throws Exception{
        // リージョンのエンドポイントを指定します。この例では、中国 (杭州) リージョンのエンドポイントが使用されます。
        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";
        // コールバックリクエストが送信されるサーバーのアドレスを指定します。例:https://example.com:23450。
        String callbackUrl = "yourCallbackServerUrl";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを cn-hangzhou に設定します。
        String region = "cn-hangzhou";

        // OSSClient インスタンスを作成します。
        // OSSClient が不要になったら、shutdown メソッドを呼び出して関連リソースを解放します。
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();
        
        try {
            String content = "Hello OSS";
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName,new ByteArrayInputStream(content.getBytes()));

            // アップロードコールバックパラメーターを設定します。
            Callback callback = new Callback();
            callback.setCallbackUrl(callbackUrl);
            // (任意) コールバックリクエストヘッダーに CallbackHost フィールドを指定します。
            // callback.setCallbackHost("yourCallbackHost");
            
            // コールバックリクエストボディを JSON 形式で設定し、その中にプレースホルダー変数を定義します。
            callback.setCalbackBodyType(Callback.CalbackBodyType.JSON);
            callback.setCallbackBody("{\\\"bucket\\\":${bucket},\\\"object\\\":${object},\\\"mimeType\\\":${mimeType},\\\"size\\\":${size},\\\"my_var1\\\":${x:var1},\\\"my_var2\\\":${x:var2}}");

            // コールバックリクエストのカスタムパラメーターを設定します。各カスタムパラメーターはキーと値で構成されます。キーは x: で始まる必要があります。
            callback.addCallbackVar("x:var1", "value1");
            callback.addCallbackVar("x:var2", "value2");
            putObjectRequest.setCallback(callback);

            // アップロード操作を実行します。
            PutObjectResult putObjectResult = ossClient.putObject(putObjectRequest);

            // アップロードコールバックから返されたメッセージ本文を読み取ります。
            byte[] buffer = new byte[1024];
            putObjectResult.getResponse().getContent().read(buffer);
            // データを読み取った後、取得したストリームを閉じる必要があります。そうしないと、接続リークが発生する可能性があります。その結果、利用可能な接続がなくなり、例外が発生します。
            putObjectResult.getResponse().getContent().close();
        } 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 (Throwable 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();
            }
        }
    }
}

Python

開始する前に、認証情報を設定し、OSS Python SDK をインストールしていることを確認してください。

import base64
import argparse
import alibabacloud_oss_v2 as oss

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

# 必須パラメーターを追加します。
parser.add_argument('--region', help='バケットが配置されているリージョン。', required=True)
parser.add_argument('--bucket', help='バケットの名前。', required=True)
parser.add_argument('--endpoint', help='他のサービスが OSS にアクセスするために使用できるドメイン名。')
parser.add_argument('--key', help='オブジェクトの名前。', required=True)
parser.add_argument('--call_back_url', help='コールバックサーバーのアドレス。', required=True)


def main():

    args = parser.parse_args()

    # 環境変数から認証情報をロードします。
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # SDK クライアントを設定します。
    cfg = oss.config.load_default()
    cfg.credentials_provider = credentials_provider
    cfg.region = args.region
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # OSS クライアントを作成します。
    client = oss.Client(cfg)

    # アップロードするコンテンツ (文字列)。
    data = 'hello world'

    # コールバックパラメーター (callback) を構築します:Webhook アドレスとコールバックリクエストボディを指定し、Base64 エンコーディングを使用します。
    callback=base64.b64encode(str('{\"callbackUrl\":\"' + args.call_back_url + '\",\"callbackBody\":\"bucket=${bucket}&object=${object}&my_var_1=${x:var1}&my_var_2=${x:var2}\"}').encode()).decode()
    # カスタム変数 (callback-var) を構築し、Base64 エンコーディングを使用します。
    callback_var=base64.b64encode('{\"x:var1\":\"value1\",\"x:var2\":\"value2\"}'.encode()).decode()

    # コールバックパラメーターを含むアップロードリクエストを開始します。
    result = client.put_object(oss.PutObjectRequest(
        bucket=args.bucket,
        key=args.key,
        body=data,
        callback=callback,
        callback_var=callback_var,
    ))
    # ステータスコードとリクエスト ID を含む返された結果を出力します。
    print(vars(result))


if __name__ == "__main__":
    main()

Go

開始する前に、認証情報を設定し、OSS Go SDK をインストールしていることを確認してください。

package main

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

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

// グローバル変数を指定します。
var (
	region     string // バケットが配置されているリージョン。
	bucketName string // バケットの名前。
	objectName string // オブジェクトの名前。
)

// コマンドラインパラメーターを初期化するために使用される init 関数を指定します。
func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
	flag.StringVar(&objectName, "object", "", "The name of the object.")
}

func main() {
	// コマンドラインパラメーターを解析します。
	flag.Parse()

	// バケット名が空かどうかを確認します。
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	// リージョンが空かどうかを確認します。
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	// オブジェクト名が空かどうかを確認します。
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, object name required")
	}

	// デフォルト設定をロードし、認証情報プロバイダーとリージョンを指定します。
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// OSSClient インスタンスを作成します。
	client := oss.NewClient(cfg)

	// コールバックパラメーターを指定します。
	callbackMap := map[string]string{
		"callbackUrl":      "http://example.com:23450",                                                        // コールバックサーバーの URL を指定します。例:https://example.com:23450。
		"callbackBody":     "bucket=${bucket}&object=${object}&size=${size}&my_var_1=${x:my_var1}&my_var_2=${x:my_var2}", // コールバックリクエストボディを指定します。
		"callbackBodyType": "application/x-www-form-urlencoded",                                                          // コールバックリクエストボディのタイプを指定します。
	}

	// コールバックパラメーターの設定を JSON 文字列に変換し、その文字列を Base64 でエンコードしてコールバック設定を渡します。
	callbackStr, err := json.Marshal(callbackMap)
	if err != nil {
		log.Fatalf("failed to marshal callback map: %v", err)
	}
	callbackBase64 := base64.StdEncoding.EncodeToString(callbackStr)

	callbackVarMap := map[string]string{}
	callbackVarMap["x:my_var1"] = "thi is var 1"
	callbackVarMap["x:my_var2"] = "thi is var 2"
	callbackVarStr, err := json.Marshal(callbackVarMap)
	if err != nil {
		log.Fatalf("failed to marshal callback var: %v", err)
	}
	callbackVarBase64 := base64.StdEncoding.EncodeToString(callbackVarStr)
	// アップロードする文字列を指定します。
	body := strings.NewReader("Hello, OSS!") // アップロードする文字列。

	// ローカルファイルをアップロードするリクエストを作成します。
	request := &oss.PutObjectRequest{
		Bucket:      oss.Ptr(bucketName),        // バケットの名前。
		Key:         oss.Ptr(objectName),        // オブジェクトの名前。
		Body:        body,                       // オブジェクトのコンテンツ。
		Callback:    oss.Ptr(callbackBase64),    // コールバックパラメーター。
		CallbackVar: oss.Ptr(callbackVarBase64),
	}

	// ローカルファイルをアップロードするリクエストを実行します。
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put object %v", err)
	}

	// オブジェクトのアップロード操作の結果を表示します。
	log.Printf("put object result:%#v\n", result)
}

PHP

<?php

// 依存ライブラリをロードするために autoload ファイルをインポートします。
require_once __DIR__ . '/../vendor/autoload.php';

use AlibabaCloud\Oss\V2 as Oss;

// コマンドラインパラメーターの説明を指定します。
$optsdesc = [
    "region" => ['help' => 'バケットが配置されているリージョン。', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => '他のサービスが OSS にアクセスするために使用できるドメイン名。', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => 'バケットの名前。', 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => 'オブジェクトの名前。', 'required' => True], // (必須) オブジェクトの名前を指定します。
];

// パラメーターの説明を getopt が要求する長いオプションリストに変換します。
// 各パラメーターの末尾にコロン (:) を追加して、値が必要であることを示します。
$longopts = \array_map(function ($key) {
    return "$key:";
}, array_keys($optsdesc));

// コマンドラインパラメーターを解析します。
$options = getopt("", $longopts);

// 必須パラメーターが設定されているか確認します。
foreach ($optsdesc as $key => $value) {
    if ($value['required'] === True && empty($options[$key])) {
        $help = $value['help']; // パラメーターのヘルプ情報を取得します。
        echo "Error: the following arguments are required: --$key, $help" . PHP_EOL;
        exit(1); // 必須パラメーターが設定されていない場合、プログラムを終了します。
    }
}

// 解析されたパラメーターから値を取得します。
$region = $options["region"]; // バケットが配置されているリージョン。
$bucket = $options["bucket"]; // バケットの名前。
$key = $options["key"]; // オブジェクトの名前。

// 環境変数からアクセス認証情報を取得します。
// EnvironmentVariableCredentialsProvider 環境変数から AccessKey ID と AccessKey Secret を取得します。
$credentialsProvider = new Oss\Credentials\EnvironmentVariableCredentialsProvider();

// SDK のデフォルト設定を使用します。
$cfg = Oss\Config::loadDefault();
$cfg->setCredentialsProvider($credentialsProvider); // 認証情報プロバイダーを指定します。
$cfg->setRegion($region); // バケットが配置されているリージョンを指定します。
if (isset($options["endpoint"])) {
    $cfg->setEndpoint($options["endpoint"]); // エンドポイントが提供されている場合はエンドポイントを指定します。
}

// OSSClient インスタンスを作成します。
$client = new Oss\Client($cfg);

// コールバックサーバーに関する情報を指定します。
// コールバック URL を指定します。これは、コールバックリクエストを受信するサーバーのアドレスです。
// コールバックホストを指定します。これは、コールバックサーバーのホスト名です。
// コールバックボディを指定します。これは、コールバックコンテンツを指定するために使用されるテンプレートです。動的プレースホルダーがサポートされています。
// コールバックボディのタイプを指定します。これは、コールバックコンテンツのフォーマットです。
$callback = base64_encode(json_encode(array(
    'callbackUrl' => yourCallbackServerUrl, // yourCallbackServerUrl を実際のコールバックサーバー URL に置き換えます。
    'callbackHost' => 'CallbackHost', // CallbackHost を実際のコールバックサーバーのホスト名に置き換えます。
    'callbackBody' => 'bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&my_var1=${x:var1}&my_var2=${x:var2}',
    'callbackBodyType' => "application/x-www-form-urlencoded", // コールバックコンテンツのフォーマットを指定します。
)));

// コールバックで追加情報を渡すためのカスタム変数を指定します。
$callbackVar = base64_encode(json_encode(array(
    'x:var1' => "value1", // 最初のカスタム変数を指定します。
    'x:var2' => 'value2', // 2 番目のカスタム変数を指定します。
)));

// ローカルファイルをアップロードするための PutObjectRequest オブジェクトを作成します。
$request = new Oss\Models\PutObjectRequest(bucket: $bucket, key: $key);
$request->callback = $callback; // コールバック情報を指定します。
$request->callbackVar = $callbackVar; // カスタム変数を指定します。

// シンプルアップロードリクエストを実行します。
$result = $client->putObject($request);

// シンプルアップロードリクエストの結果を表示します。
// HTTP ステータスコード、リクエスト ID、およびコールバック結果を表示して、リクエストが成功したかどうかを確認します。
printf(
    'status code:' . $result->statusCode . PHP_EOL . // HTTP ステータスコード。たとえば、HTTP ステータスコード 200 はリクエストが成功したことを示します。
    'request id:' . $result-> requestId. PHP_EOL . // リクエスト ID。リクエストのデバッグや追跡に使用されます。
    'callback result:' . var_export($result->callbackResult, true) . PHP_EOL // コールバック結果の詳細。
);

.NET

using System;
using System.IO;
using System.Text;
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;
namespace Callback
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.PutObjectCallback();
            Console.ReadKey();
        }
        public static void PutObjectCallback()
        {
            // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、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";
           // ローカルファイルの完全なパスを指定します。例:D:\\localpath\\examplefile.txt。ローカルパスを指定しない場合、ファイルはプロジェクトのデフォルトパスからアップロードされます。
            var localFilename = "D:\\localpath\\examplefile.txt";
            // コールバックサーバーの URL を設定します。例:https://example.com:23450。
            const string callbackUrl = "yourCallbackServerUrl";
            // コールバックのリクエストボディの値を設定します。
            const string callbackBody = "bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&" +
                                        "my_var1=${x:var1}&my_var2=${x:var2}";
            //  バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
            const string endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
            // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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
            {
                string responseContent = "";
                var metadata = BuildCallbackMetadata(callbackUrl, callbackBody);
                using (var fs = File.Open(localFilename, FileMode.Open))
                {
                    var putObjectRequest = new PutObjectRequest(bucketName, objectName, fs, metadata);
                    var result = client.PutObject(putObjectRequest);
                    responseContent = GetCallbackResponse(result);
                }
                Console.WriteLine("Put object:{0} succeeded, callback response content:{1}", objectName, responseContent);
            }
            catch (OssException ex)
            {
                Console.WriteLine("Failed with error code: {0}; Error info: {1}. \nRequestID: {2}\tHostID: {3}",
                    ex.ErrorCode, ex.Message, ex.RequestId, ex.HostId);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Failed with error info: {0}", ex.Message);
            }
        }
        // アップロードコールバックを設定します。
        private static ObjectMetadata BuildCallbackMetadata(string callbackUrl, string callbackBody)
        {
            string callbackHeaderBuilder = new CallbackHeaderBuilder(callbackUrl, callbackBody).Build();
            string CallbackVariableHeaderBuilder = new CallbackVariableHeaderBuilder().
                AddCallbackVariable("x:var1", "x:value1").AddCallbackVariable("x:var2", "x:value2").Build();
            var metadata = new ObjectMetadata();
            metadata.AddHeader(HttpHeaders.Callback, callbackHeaderBuilder);
            metadata.AddHeader(HttpHeaders.CallbackVar, CallbackVariableHeaderBuilder);
            return metadata;
        }
        // アップロードコールバックから返されたメッセージを読み取ります。
        private static string GetCallbackResponse(PutObjectResult putObjectResult)
        {
            string callbackResponse = null;
            using (var stream = putObjectResult.ResponseStream)
            {
                var buffer = new byte[4 * 1024];
                var bytesRead = stream.Read(buffer, 0, buffer.Length);
                callbackResponse = Encoding.Default.GetString(buffer, 0, bytesRead);
            }
            return callbackResponse;
        }
    }
}

Node.js

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

var path = require("path");

const client = new OSS({
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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: "examplebucket",
});

const options = {
  callback: {
    // コールバックリクエストを受信するコールバックサーバーのアドレスを指定します。例:http://oss-demo.aliyuncs.com:23450。
    url: "http://oss-demo.aliyuncs.com:23450",
    // (任意) コールバックリクエストヘッダーに含まれる Host フィールドを指定します。
    //host: 'yourCallbackHost',
    // コールバックリクエストのボディを指定します。
    body: "bucket=${bucket}&object=${object}&var1=${x:var1}&var2=${x:var2}",
    // コールバックリクエストに Content-Type を指定します。
    contentType: "application/x-www-form-urlencoded",
    // クライアントからコールバックリクエストが開始されたときに、OSS が callbackUrl で指定されたソースアドレスにサーバー名表示 (SNI) を送信するかどうかを指定します。
    callbackSNI: true,
    // コールバックリクエストのカスタムパラメーターを設定します。
    customValue: {
      var1: "value1",
      var2: "value2",
    },
  },
};

async function put() {
  try {
    // オブジェクトとローカルファイルの完全なパスを指定します。オブジェクトの完全なパスにバケット名を含めないでください。
    // デフォルトでは、ローカルファイルのパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトのローカルパスからアップロードされます。
    let result = await client.put(
      "exampleobject.txt",
      path.normalize("/localpath/examplefile.txt"),
      options
    );
    console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();

Ruby

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # エンドポイントの例として、中国 (杭州) リージョンを使用します。実際のリージョンに基づいてエンドポイントを指定してください。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
    # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、環境変数 OSS_ACCESS_KEY_ID と OSS_ACCESS_KEY_SECRET が設定されていることを確認してください。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)
# バケット名を指定します。例: examplebucket
bucket = client.get_bucket('examplebucket')

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

begin
  bucket.put_object('files/hello', file: '/tmp/x', callback: callback)
rescue Aliyun::OSS::CallbackError => e
  puts "コールバックに失敗しました: #{e.message}"
end

Browser.js

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <title>ドキュメント</title>
  </head>

  <body>
    <button id="submit">アップロードコールバック</button>
    <!--SDK ファイルをインポート-->
    <script
      type="text/javascript"
      src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.16.0.min.js"
    ></script>
    <script type="text/javascript">
      const client = new OSS({
        // yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、yourRegion を oss-cn-hangzhou に設定します。
        region: "yourRegion",
        authorizationV4: true,
        // セキュリティトークンサービス (STS) から取得した一時的な AccessKey ペア (AccessKey ID と AccessKey Secret)。
        accessKeyId: "yourAccessKeyId",
        accessKeySecret: "yourAccessKeySecret",
        // STS サービスから取得したセキュリティトークン (SecurityToken)。
        stsToken: "yourSecurityToken",
        // バケット名を指定します。例:examplebucket。
        bucket: "examplebucket",
      });

      const options = {
        callback: {
          // コールバックリクエストのサーバーアドレス。アドレスはインターネット URL である必要があります。
          url: "http://examplebucket.aliyuncs.com:23450",
          // コールバックリクエストヘッダーの Host の値。これはサーバーで設定された Host の値です。
          // host: 'yourHost',
          // コールバックのリクエストボディの値。
          body: "bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&imageInfo.height=${imageInfo.height}&imageInfo.width=${imageInfo.width}&imageInfo.format=${imageInfo.format}&var1=${x:var1}&var2=${x:var2}",
          // コールバックリクエストの Content-Type。
          // contentType: 'application/x-www-form-urlencoded',
          // クライアントがコールバックリクエストを開始したときに、OSS が callbackUrl で指定されたソース URL にサーバー名表示 (SNI) を送信するかどうかを指定します。
          callbackSNI: true,
          // コールバックリクエストのカスタムパラメーター。
          customValue: {
            var1: "value1",
            var2: "value2",
          },
        },
      };
      // DOM を取得します。
      const submit = document.getElementById("submit");
      // アップロードコールバック。
      submit.addEventListener("click", () => {
        client
          .put("example.txt", new Blob(["Hello World"]), options)
          .then((r) => console.log(r));
      });
    </script>
  </body>
</html>

Android

// アップロードリクエストを作成します。
// バケット名、オブジェクトの完全なパス、およびローカルファイルの完全なパスを指定します。例:examplebucket、exampledir/exampleobject.txt、および /storage/emulated/0/oss/examplefile.txt。
// オブジェクトの完全なパスにはバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

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

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

        // この値には、servercallback が設定されている場合にのみデータが含まれます。
        String serverCallbackReturnJson = result.getServerCallbackReturnBody();

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

    @Override
    public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 例外を処理します。
    }
});
        

C++

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

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

     /* ネットワークリソースを初期化します。*/
    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::stringstream>();
    *content << "Thank you for using Alibaba Cloud Object Storage Service!";

    /* アップロードコールバックパラメーターを設定します。*/
    std::string callbackBody = "bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&my_var1=${x:var1}";
    ObjectCallbackBuilder builder(ServerName, callbackBody, "", ObjectCallbackBuilder::Type::URL);
    std::string value = builder.build();
    ObjectCallbackVariableBuilder varBuilder;
    varBuilder.addCallbackVariable("x:var1", "value1");
    std::string varValue = varBuilder.build();
    PutObjectRequest request(BucketName, ObjectName, content);
    request.MetaData().addHeader("x-oss-callback", value);
    request.MetaData().addHeader("x-oss-callback-var", varValue);
    auto outcome = client.PutObject(request);

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

iOS

OSSPutObjectRequest * request = [OSSPutObjectRequest new];
// バケットの名前を指定します。例:examplebucket。
request.bucketName = @"examplebucket";
// オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例:exampledir/exampleobject.txt。
request.objectKey = @"exampledir/exampleobject.txt";
request.uploadingFileURL = [NSURL fileURLWithPath:@"<filepath>"];
// コールバックパラメーターを設定します。
request.callbackParam = @{
                          @"callbackUrl": @"<your server callback address>",
                          @"callbackBody": @"<your callback body>"
                          };
// カスタム変数を指定します。
request.callbackVar = @{
                        @"<var1>": @"<value1>",
                        @"<var2>": @"<value2>"
                        };
request.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
    NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * task = [client putObject:request];
[task continueWithBlock:^id(OSSTask *task) {
    if (task.error) {
        OSSLogError(@"%@", task.error);
    } else {
        OSSPutObjectResult * result = task.result;
        NSLog(@"Result - requestId: %@, headerFields: %@, servercallback: %@",
              result.requestId,
              result.httpResponseHeaderFields,
              result.serverReturnJsonString);
    }
    return nil;
}];
// タスクが完了するのを待つために同期ブロッキングを実装します。
// [task waitUntilFinished]; 

C

#include "oss_api.h"
#include "aos_http_io.h"
/* yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、中国 (杭州) リージョンの場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。*/
const char *endpoint = "yourEndpoint";

/* バケット名を指定します。例:examplebucket。*/
const char *bucket_name = "examplebucket";
/* オブジェクトの完全なパスを指定します。完全なパスにはバケット名を含めることはできません。例:exampledir/exampleobject.txt。*/
const char *object_name = "exampledir/exampleobject.txt";
const char *object_content = "More than just cloud.";
/* yourRegion をバケットが配置されているリージョンに設定します。たとえば、中国 (杭州) リージョンの場合、リージョンを cn-hangzhou に設定します。*/
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* aos_string_t 型を char* 文字列で初期化します。*/
    aos_str_set(&options->config->endpoint, endpoint);
    /* 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。*/    
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // 次の 2 つのパラメーターを設定します。
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* CNAME (Canonical Name) が使用されるかどうかを指定します。値 0 は CNAME が使用されないことを示します。*/
    options->config->is_cname = 0;
    /* タイムアウト期間などのネットワークパラメーターを設定します。*/
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    aos_pool_t *p = NULL;
    aos_status_t *s = NULL;
    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *headers = NULL;
    oss_request_options_t *options = NULL;
    aos_table_t *resp_headers = NULL;
    aos_list_t resp_body;
    aos_list_t buffer;
    aos_buf_t *content;
    char *buf = NULL;
    int64_t len = 0;
    int64_t size = 0;
    int64_t pos = 0;
    char b64_buf[1024];
    int b64_len;
    /* JSON 形式を使用します。*/
    /* (任意) コールバックリクエストメッセージのヘッダーに Host 値を設定します。たとえば、サーバーで設定された Host 値などです。*/
    char *callback =  "{"
        "\"callbackUrl\":\"http://oss-demo.aliyuncs.com:23450\","
         "\"callbackHost\":\"yourCallbackHost\","
        "\"callbackBody\":\"bucket=${bucket}&object=${object}&size=${size}&mimeType=${mimeType}\","
        "\"callbackBodyType\":\"application/x-www-form-urlencoded\""
        "}";
    /* プログラムエントリで aos_http_io_initialize メソッドを呼び出して、ネットワークやメモリなどのグローバルリソースを初期化します。*/
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* パラメーターを初期化します。*/
    aos_pool_create(&p, NULL);
    options = oss_request_options_create(p);
    init_options(options);
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    aos_list_init(&resp_body);
    aos_list_init(&buffer);
    content = aos_buf_pack(options->pool, object_content, strlen(object_content));
    aos_list_add_tail(&content->node, &buffer);
    /* ヘッダーにコールバックを追加します。*/
    b64_len = aos_base64_encode((unsigned char*)callback, strlen(callback), b64_buf);
    b64_buf[b64_len] = '\0';
    headers = aos_table_make(p, 1);
    apr_table_set(headers, OSS_CALLBACK, b64_buf);
    /* アップロードコールバック。*/
    s = oss_do_put_object_from_buffer(options, &bucket, &object, &buffer,
        headers, NULL, NULL, &resp_headers, &resp_body);
    if (aos_status_is_ok(s)) {
        printf("put object from buffer succeeded\n");
    } else {
        printf("put object from buffer failed\n");
    }
    /* バッファー長を取得します。*/
    len = aos_buf_list_len(&resp_body);
    buf = (char *)aos_pcalloc(p, (apr_size_t)(len + 1));
    buf[len] = '\0';
    /* バッファーコンテンツをメモリにコピーします。*/
    aos_list_for_each_entry(aos_buf_t, content, &resp_body, node) {
        size = aos_buf_size(content);
        memcpy(buf + pos, content->pos, (size_t)size);
        pos += size;
    }
    /* メモリプールを解放します。これにより、リクエスト中にさまざまなリソースに割り当てられたメモリが解放されます。*/
    aos_pool_destroy(p);
    /* 以前に割り当てられたグローバルリソースを解放します。*/
    aos_http_io_deinitialize();
    return 0;
}

ossutil CLI

put-object コマンドを使用する前に、ossutil をインストールしていることを確認してください。

例

  • 文字列からオブジェクトをアップロードします。

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss"
  • ローカルファイルからオブジェクトをアップロードします。

    ossutil api put-object --bucket examplebucket --key exampleobject --body file://uploadFile
  • カスタムメタデータ付きで文字列をアップロードします。

    ossutil api put-object --bucket examplebucket --key exampleobject  --metadata user=aliyun --metadata email=ali***@aliyuncs.com --body "hi oss"
  • タグ付きで文字列をアップロードします。

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --tagging "TagA=A&TagB=B"
  • 指定された ACL とストレージクラスで文字列をアップロードします。

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --object-acl private --storage-class IA
  • サーバーサイド暗号化で文字列をアップロードします。

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --server-side-encryption KMS --server-side-data-encryption SM4 --server-side-encryption-key-id 9468da86-3509-4f8d-a61e-6eab1eac****
  • 同名のオブジェクトを上書きせずに文字列をアップロードします。

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --forbid-overwrite true
  • キャッシュ制御設定付きで文字列をアップロードします。

    ossutil api put-object --bucket examplebucket --key exampleobject --body "hi oss" --cache-control no-cache
  • カスタムダウンロードファイル名で文字列をアップロードします。

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

関連 API

上記の方法は API オペレーションに基づいて構築されています。RESTful API を直接呼び出すには、手動で署名を計算する必要があります。PutObject。

権限

デフォルトでは、Alibaba Cloud アカウント (root ユーザー) は完全な権限を持っています。Alibaba Cloud アカウント (root ユーザー) の下の RAM ユーザーまたは RAM ロールは、デフォルトでは権限を持っていません。Alibaba Cloud アカウント (root ユーザー) または管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。

API

アクション

説明

PutObject

oss:PutObject

オブジェクトをアップロードします。

oss:PutObjectTagging

オブジェクトをアップロードする際に x-oss-tagging ヘッダーを使用してオブジェクトタグを指定する場合に必要です。

kms:GenerateDataKey

オブジェクトをアップロードする際に X-Oss-Server-Side-Encryption: KMS ヘッダーが KMS に設定されている場合に必要です。

kms:Decrypt

課金

シンプルアップロードでは、以下の課金項目に対して料金が発生します。OSS 料金。

API

課金項目

説明

PutObject

PUT リクエスト

成功したリクエストの数に基づいてリクエスト料金が請求されます。

ストレージ料金

オブジェクトのストレージクラス、サイズ、および保存期間に基づいてストレージ料金が請求されます。

よくある質問

大きなファイルのアップロード

シンプルアップロードは最大 5 GB のファイルをサポートします。5 GB を超えるファイルをアップロードするには、マルチパートアップロードを使用します。

ファイルのバッチアップロード

  • OSS コンソールを使用する (手動でのファイルフィルターをサポート)

    宛先バケットの名前をクリックします。アップロード > フォルダーの選択 をクリックし、アップロードするフォルダーを選択し、不要なファイルを削除してから、アップロード をクリックします。

  • ossbrowser を使用する (ファイルフィルターをサポートしない)

    宛先バケットの名前をクリックします。ページの上部で アップロード をクリックし、ドロップダウンリストからアップロードするフォルダーを選択します。

  • ossutil を使用する (ファイル名によるフィルターをサポート)

    ossutil cp コマンドと -r (--recursive) オプションを使用して、ファイルをバッチアップロードします。--include と --exclude を使用してファイル名でフィルターします。cp (ファイルのアップロード)。

    • ローカルフォルダー localfolder から examplebucket バケットの desfolder フォルダーにファイルをアップロードします。

      ossutil cp -r D:/localpath/localfolder/ oss://examplebucket/desfolder/
    • 特定の条件を満たすファイルをバッチでアップロードします。

      たとえば、次のコマンドはすべての TXT ファイルをアップロードします。

      ossutil cp -r D:/localpath/localfolder/ oss://examplebucket/desfolder/ --include "*.txt"
  • ZIP パッケージの展開

    ZIP 展開を使用してファイルをバッチでアップロードします:展開ルールを設定し、ZIP ファイルを OSS にアップロードすると、Function Compute が自動的に展開します。ZIP パッケージの展開。

サードパーティへの一時的なアクセス

OSS は、一時的なサードパーティアクセスに 2 つの方法を提供します:

アップロードされたファイルの処理

  • 画像処理:アップロードされた画像を圧縮、スタイル設定、または分析します。画像処理。

  • ApsaraVideo Media Processing:アップロードされたメディアファイル (テキスト認識、字幕抽出、トランスコード、サムネイル生成) を処理します。ApsaraVideo Media Processing。

カスタムドメイン名の使用

SDK を使用する場合、OssClient の作成時にカスタムドメイン名を指定します。各言語の設定で cname パラメーターを true に設定します。カスタムドメイン名を使用して OSS にアクセスする。

偶発的な上書きの防止

デフォルトでは、シンプルアップロードは同じ名前のオブジェクトを上書きします。偶発的な上書きを防ぐには、次のいずれかの方法を使用します。

  • バージョン管理を有効にする

    バージョン管理を有効にすると、上書きされたオブジェクトはいつでも復元できる以前のバージョンとして保存されます。バージョン管理の概要。

  • リクエストパラメーターを使用して上書きを防止する

    アップロードリクエストで x-oss-forbid-overwrite ヘッダーを true に設定します。同じ名前のオブジェクトが存在する場合、アップロードは FileAlreadyExists エラーで失敗します。省略または false に設定されている場合、既存のオブジェクトは上書きされます。

PUT リクエスト料金の削減

多数のオブジェクトをアップロードする場合、アップロードするオブジェクトに直接ディープコールドアーカイブストレージクラスを指定すると、高いPUT リクエスト料金が発生します。PUT リクエスト料金を削減するために、まずオブジェクトをアップロードする際に標準ストレージクラスを指定し、その後ライフサイクルルールを使用してディープコールドアーカイブストレージクラスに変換することを推奨します。

同時アップロードの動作

結果は、バージョン管理が有効になっているかどうかによって異なります:

  • バージョン管理が無効または一時停止されている場合:複数のユーザーが同じ名前のオブジェクトをアップロードすると、最後にアップロードを完了したオブジェクトが前のものを上書きします。前のオブジェクトは保持されません。たとえば、ユーザー B の後にユーザー A がアップロードを完了した場合、ユーザー A がアップロードしたオブジェクトが保持されます。

  • バージョン管理が有効な場合:同じ名前のオブジェクトをアップロードすると、一意のバージョン ID で識別される新しいバージョンが作成されます。OSS はアップロードの開始時刻に基づいて現在のバージョンを決定します。たとえば、ユーザー A の後にユーザー B がアップロードを開始した場合、ユーザー B のオブジェクトが現在のバージョンになります。

アップロードパフォーマンスの最適化

連続したプレフィックス (タイムスタンプ、アルファベット文字) を持つ多数のオブジェクトをアップロードすると、インデックスが単一のパーティションに集中し、リクエストレートが低下します。代わりにランダムなプレフィックスを使用してください。OSS パフォーマンスのベストプラクティス。