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

Object Storage Service:シンプルアップロード

最終更新日:Dec 09, 2025

高い同時アップロード速度を必要としない場合、シンプルアップロードを使用して、5 GB 以下のファイルを Object Storage Service (OSS) にアップロードします。

警告

OSS-HDFS サービスが有効になっているバケットでは、OSS-HDFS サービス以外の方法で .dlsdata/ データストレージディレクトリにオブジェクトをアップロードしないでください。そうしないと、OSS-HDFS サービスが正常に機能しなくなったり、データが失われたりするおそれがあります。

操作手順

シンプルアップロードを使用する前に、バケットが作成されていることを確認してください。

重要

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

OSS コンソールの使用

説明

金融クラウドの OSS にはパブリックネットワークリージョンがありません。コンソールからファイルをアップロードすることはできません。ファイルをアップロードするには、SDK、ossutil、または ossbrowser を使用する必要があります。

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

  2. 左側のナビゲーションウィンドウで、バケット をクリックします。[バケット] ページで、目的のバケットを見つけてクリックします。

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

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

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

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

      基本オプション

      パラメーター

      説明

      [アップロード先]

      宛先バケットにアップロードされた後のファイルのストレージパスを設定します。

      • カレントディレクトリ:ファイルを現在のフォルダにアップロードします。

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

        フォルダ名は次の要件を満たす必要があります:

        • 名前は 1~254 文字の長さで、UTF-8 文字のみを含めることができます。

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

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

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

      オブジェクト ACL

      ファイルのアクセス制御リスト (ACL) を設定します。

      • [バケットから継承]:ファイルの 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 のみをサポートします。

      詳細については、「ストレージクラス」をご参照ください。

      暗号化の方法

      ファイルのサーバー側暗号化方式を設定します。

      • [バケットから継承]:ファイルのサーバー側暗号化方式はバケットの方式と同じです。

      • [OSS マネージド]:OSS が管理するキーを使用してバケット内のオブジェクトを暗号化します。OSS は各オブジェクトを異なるキーで暗号化します。OSS はまた、マスターキーを使用してキーを暗号化します。

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

        • [alias/acs/oss(CMK ID)]:デフォルトの CMK を使用してオブジェクトを暗号化し、ダウンロード時にオブジェクトを自動的に復号します。

        • [alias/<cmkname>(CMK ID)]:カスタム CMK を使用してバケット内のオブジェクトを暗号化します。CMK ID は暗号化されたオブジェクトのメタデータに記録されます。復号権限を持つユーザーがダウンロードすると、オブジェクトは自動的に復号されます。<cmkname> は、CMK 作成時に設定したオプションの CMK 名です。

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

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

      ユーザーメタデータ

      オブジェクトに説明情報を追加します。複数のユーザー定義メタデータエントリを追加できます。すべてのユーザー定義メタデータの合計サイズは 8 KB を超えることはできません。ユーザー定義メタデータを追加する場合、パラメーターは x-oss-meta- プレフィックスで始まり、値が割り当てられている必要があります。例:x-oss-meta-location:hangzhou

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

    その後、タスクのアップロード タブでファイルのアップロード進行状況を確認できます。

ossbrowser の使用

ossbrowser を使用してシンプルアップロードを行う前に、ossbrowser 2.0 をインストールし、ログインしていることを確認してください。

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

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

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

Alibaba Cloud SDK の使用

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

完全なローカルファイルを指定された OSS バケットにアップロードできます。

Java

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

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

public class Demo {

    public static void main(String[] args) throws Exception {
        // この例では、中国 (杭州) リージョンのエンドポイントを使用します。実際のエンドポイントを指定してください。 
        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 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 をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を oss-cn-hangzhou に設定します。
  region: 'yourregion',
  // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: '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' => The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => The name of the bucket, 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => The name of the object, 'required' => True], // (必須) オブジェクトの名前を指定します。
    "file" => ['help' => 'Local path to the file you want to upload.', '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="en">
  <head>
    <meta charset="UTF-8" />
    <title>Document</title>
  </head>
  <body>
    <input id="file" type="file" />
    <button id="upload">Upload an Object</button>
    <script src="https://gosspublic.alicdn.com/aliyun-oss-sdk-6.18.0.min.js"></script>
    <script>
      const client = new OSS({
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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;

// yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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',
  // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を oss-cn-hangzhou に設定します。
  region: 'oss-cn-hangzhou',
});

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

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

const putObject = async () => {
  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);
    /* オプションを作成して初期化します。このパラメーターには、エンドポイント、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')

文字列のアップロード

メモリから文字列コンテンツを直接 OSS にファイルとしてアップロードできます。

Java

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

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
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";
        // バケットが配置されているリージョンを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、リージョンを 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 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)

    # アップロードする文字列を定義します。
    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 SDK for Go をインストールしていることを確認してください。

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' => The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => The name of the bucket, 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => The name of the object, '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;

// yourEndpoint をバケットが配置されているリージョンのエンドポイントに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを 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 をインストールしていることを確認してください。

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";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: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({
  // yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を oss-cn-hangzhou に設定します。
  region: 'yourRegion',
  // 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケット名を指定します。たとえば、examplebucket。
  bucket: 'examplebucket',
});

async function putStream () {
  try {
    // チャンクエンコーディングを使用します。putStream インターフェイスを使用すると、SDK はデフォルトでチャンクエンコーディングを使用して HTTP PUT リクエストを送信します。
    // データストリームを読み取るローカルファイルの完全なパスを指定します。
    // ローカルファイルの完全なパスにローカルパスを指定しない場合、ファイルはサンプルプログラムが属するプロジェクトに対応するローカルパスからデフォルトでアップロードされます。
    let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
    // オブジェクトの完全なパスを指定します。たとえば、exampledir/exampleobject.txt。オブジェクトの完全なパスにはバケット名を含めることはできません。
    let result = await client.putStream('exampledir/exampleobject.txt', stream);    

    // チャンクエンコーディングを使用しないでください。options で contentLength パラメーターを指定した場合、チャンクエンコーディングは使用されません。
    // let stream = fs.createReadStream('D:\\localpath\\examplefile.txt');
    // let size = fs.statSync('D:\\localpath\\examplefile.txt').size;
    // let result = await client.putStream(
    // 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 をインストールしていることを確認してください。

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";
        // オブジェクトの完全なパスを指定します。完全なパスにバケット名を含めないでください。例: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({  
  // yourRegion をバケットが配置されているリージョンに設定します。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を oss-cn-hangzhou に設定します。
  region: 'yourRegion',
  // 環境変数からアクセス認証情報を取得します。このコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケット名を指定します。たとえば、examplebucket。
  bucket: 'examplebucket',
});

// ネットワークストリームの URL を指定します。
const url = "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20220908/cbgh/image-processing_example.jpg";
// デュプレックスストリームをインポートします。
// stream パラメーターは、ファイルストリームやネットワークストリームなど、読み取り可能なストリームを実装する任意のオブジェクトにすることができます。
const Duplex = require("stream").Duplex;
// デュプレックスストリームをインスタンス化します。
let stream = new Duplex();

urllib.request(url, (err, data, res) => {
  if (!err) {
    // デュプレックスストリームを介してデータを受信します。
    stream.push(data);
    stream.push(null);

    client
      // オブジェクトの完全なパスを指定します。たとえば、example.png。オブジェクトの完全なパスにはバケット名を含めることはできません。
      .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' => The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => The name of the bucket, 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => The name of the object, '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' => The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => The name of the bucket, 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => The name of the object, '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);
    /* オプションを作成して初期化します。このパラメーターには、エンドポイント、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 SDK for Java 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 SDK for Python をインストールしていることを確認してください。

import base64
import argparse
import alibabacloud_oss_v2 as oss

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

# 必須パラメーターを追加します。
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')
parser.add_argument('--key', help='The name of the object.', required=True)
parser.add_argument('--call_back_url', help='Callback server address.', 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 SDK for Go をインストールしていることを確認してください。

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' => The region in which the bucket is located.', 'required' => True], // (必須) バケットが配置されているリージョンを指定します。
    "endpoint" => ['help' => The domain names that other services can use to access OSS.', 'required' => False], // (任意) 他のサービスが OSS にアクセスするために使用できるエンドポイントを指定します。
    "bucket" => ['help' => The name of the bucket, 'required' => True], // (必須) バケットの名前を指定します。
    "key" => ['help' => The name of the object, '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({
  // yourregion をバケットが配置されているリージョンに置き換えます。たとえば、バケットが中国 (杭州) リージョンにある場合、Region を oss-cn-hangzhou に設定します。
  region: "yourregion",
  // 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  authorizationV4: true,
  // バケット名を指定します。
  bucket: "examplebucket",
});

const options = {
  callback: {
    // コールバックサーバーの URL を設定します。例:http://oss-demo.aliyuncs.com:23450。
    url: "http://oss-demo.aliyuncs.com:23450",
    // (任意) コールバックリクエストのヘッダーに Host 値を設定します。これは、サーバーで設定された Host 値です。
    //host: 'yourCallbackHost',
    // コールバックのリクエストボディの値を設定します。
    body: "bucket=${bucket}&object=${object}&var1=${x:var1}&var2=${x:var2}",
    // コールバックリクエストの Content-Type を設定します。
    contentType: "application/x-www-form-urlencoded",
    // クライアントがコールバックリクエストを開始するときに、OSS が callbackUrl で指定されたオリジン URL に Server Name Indication (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 "Callback failed: #{e.message}"
end

Browser.js

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

  <body>
    <button id="submit">Upload Callback</button>
    <!--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,
        // Security Token Service (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 に Server Name Indication (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) が使用されるかどうかを指定します。値 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 の使用

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
  • 文字列からオブジェクトをアップロードし、オブジェクトがダウンロードされるときの Web ページキャッシュ動作を指定します。

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

API

アクション

定義

PutObject

oss:PutObject

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

oss:PutObjectTagging

オブジェクトをアップロードする際に、x-oss-tagging を通じてオブジェクトタグを指定する場合、この権限が必要です。

kms:GenerateDataKey

オブジェクトをアップロードする際に、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合、これら 2 つの権限が必要です。

kms:Decrypt

課金

シンプルアップロードを使用して OSS にファイルをアップロードすると、以下の課金項目が発生します。料金の詳細については、「OSS 料金」をご参照ください。

API

課金項目

説明

PutObject

PUT リクエスト

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

ストレージ料金

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

よくある質問

5 GB を超えるファイルをアップロードするにはどうすればよいですか?

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

ファイルをバッチでアップロードするにはどうすればよいですか?

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

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

  • ossbrowser の使用 (ファイルフィルタリングをサポートしない)

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

  • ossutil ツールの使用 (ファイル名によるフィルタリングをサポート)

    ossutil ツールの cp コマンドと -r (--recursive) オプションを使用して、ファイルをバッチで OSS にアップロードできます。--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 がトリガーされ、パッケージが解凍され、解凍されたファイルが OSS に再アップロードされます。これにより、バッチアップロードが実装されます。詳細については、「ZIP パッケージのアップロードと自動解凍」をご参照ください。

OSS リソースを第三者と共有して一時的にアクセスするにはどうすればよいですか?

OSS は、第三者に一時的なアクセスを許可する 2 つの方法を提供します:

アップロードされたファイルを処理するにはどうすればよいですか?

  • 画像処理:アップロードされた画像に対して、圧縮、カスタムスタイルの追加、画像サイズ情報の取得などの操作を実行できます。詳細については、「画像処理」をご参照ください。

  • メディア処理:アップロードされた画像や動画に対して、テキスト認識、字幕抽出、ビデオトランスコーディング、サムネイル生成などの操作を実行できます。詳細については、「ApsaraVideo Media Processing」をご参照ください。

シンプルアップロードにカスタムドメイン名を使用するにはどうすればよいですか?

SDK を使用して OssClient を作成するときは、カスタムドメイン名を使用します。詳細については、「カスタムドメイン名を使用した OSS へのアクセス」の SDK の例をご参照ください。すべての言語の設定で cname パラメーターを true に設定する必要があることに注意してください。

ファイルが誤って上書きされるのを防ぐにはどうすればよいですか?

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

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

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

  • 同じ名前のオブジェクトの上書きを防ぐために、アップロードリクエストにパラメーターを含める

    アップロードリクエストのヘッダーに x-oss-forbid-overwrite パラメーターを含め、その値を true に設定します。アップロードしようとしているオブジェクトと同じ名前のオブジェクトが OSS に既に存在する場合、アップロードは失敗し、FileAlreadyExists エラーが返されます。このパラメーターが含まれていないか、その値が false に設定されている場合、同じ名前のオブジェクトは上書きされます。

PUT リクエストのコストを削減するにはどうすればよいですか?

アップロード中にストレージクラスをディープコールドアーカイブに設定すると、より高い PUT リクエスト料金が発生します。オブジェクトをアップロードする際にストレージクラスを標準に設定し、ライフサイクルルールを設定して標準オブジェクトのストレージクラスをディープコールドアーカイブに変換することをお勧めします。これにより、PUT リクエスト料金が削減されます。

複数のユーザーが同じ名前とパスのファイルをアップロードした場合、OSS はどのバージョンを保持しますか?

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

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

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

アップロードパフォーマンスを最適化するにはどうすればよいですか?

オブジェクト名にタイムスタンプや文字などの連続したプレフィックスを使用して多数のオブジェクトをアップロードすると、多くのオブジェクトインデックスがバケットの特定のパーティションに保存される可能性があります。これにより、リクエストレートが低下する可能性があります。多数のオブジェクトをアップロードする場合は、オブジェクト名に連続したプレフィックスではなく、ランダムなプレフィックスを使用することをお勧めします。詳細については、「OSS パフォーマンスのベストプラクティス」をご参照ください。