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

Object Storage Service:単純なアップロード (Go SDK V2)

最終更新日:Nov 09, 2025

このトピックでは、単純なアップロードを使用してローカルファイルを Object Storage Service (OSS) にすばやくアップロードする方法について説明します。この方法はシンプルで、高速なローカルファイルのアップロードが必要なシナリオに適しています。

注意事項

  • このトピックのサンプルコードでは、中国 (杭州) のリージョン ID として cn-hangzhou を使用しています。デフォルトでは、パブリックエンドポイントを使用してバケット内のリソースにアクセスします。バケットと同じリージョンにある他の Alibaba Cloud サービスを使用してバケット内のリソースにアクセスする場合は、内部エンドポイントを使用します。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、アクセス資格情報は環境変数から読み取られます。アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。

権限

デフォルトでは、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

メソッド定義

func (c *Client) PutObject(ctx context.Context, request *PutObjectRequest, optFns ...func(*Options)) (*PutObjectResult, error)

func (c *Client) PutObjectFromFile(ctx context.Context, request *PutObjectRequest, filePath string, optFns ...func(*Options)) (*PutObjectResult, error)

API 操作

説明

Client.PutObject

単純なアップロードを実行します。アップロードできるオブジェクトの最大サイズは 5 GiB です。

CRC-64 データ検証がサポートされており、デフォルトで有効になっています。

進捗横棒グラフがサポートされています。

リクエストボディのタイプは io.Reader です。タイプが io.Seeker の場合、アップロードが失敗した場合に再送がサポートされます。

Client.PutObjectFromFile

この操作は、Client.PutObject 操作と同じ機能を提供します。

リクエストボディのデータはファイルパスから取得されます。

リクエストパラメーター

パラメーター

タイプ

説明

ctx

context.Context

リクエストのコンテキスト。このパラメーターを使用して、リクエストの合計タイムアウト期間を設定できます。

request

*PutObjectRequest

特定の API 操作のパラメーター。たとえば、アクセスの制御メソッド (Acl) の設定、上書きの禁止 (ForbidOverwrite)、カスタムメタデータ (Metadata) の指定ができます。詳細については、「PutObjectRequest」をご参照ください。

optFns

...func(*Options)

(オプション) 操作レベルの構成パラメーター。詳細については、「Options」をご参照ください。

戻り値

戻り値

タイプ

説明

result

*PutObjectResult

API 操作の戻り値。このパラメーターは、err が nil の場合に有効です。詳細については、「PutObjectResult」をご参照ください。

err

error

リクエストのステータス。リクエストが失敗した場合、err は nil ではありません。

サンプルコード

次のコードを使用して、ローカルファイルを宛先バケットにアップロードできます。

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)

	// OSS クライアントを作成します。
	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,     // オブジェクトのアクセス権限を非公開として指定します。
		Metadata: map[string]string{
			"yourMetadataKey1": "yourMetadataValue1", // オブジェクトのメタデータを設定します。
		},
	}

	// オブジェクトをアップロードするリクエストを実行します。
	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)
}

一般的なシナリオ

文字列のアップロード

次のコードを使用して、文字列を宛先バケットにアップロードできます。

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)

	// OSS クライアントを作成します。
	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)
}

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

次のコードを使用して、バイト配列を宛先バケットにアップロードできます。

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)

	// OSS クライアントを作成します。
	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)
}

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

次のコードを使用して、ネットワークストリームを宛先バケットにアップロードできます。

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)

	// OSS クライアントを作成します。
	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)
}

アップロード中の進捗表示

ファイルをアップロードする際、進捗横棒グラフを使用してアップロードの進捗をリアルタイムで表示できます。これにより、アップロードをモニターし、長時間の待機中にタスクが停止していないことを確認できます。

次のコードを使用して、進捗横棒グラフでファイルのアップロード進捗を表示できます。

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)

	// OSS クライアントを作成します。
	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)
}

ファイルアップロード時のコールバック関数の設定

OSS は、単純なアップロード (PutObject および PutObjectFromFile) が完了したときに、アプリケーションサーバーにコールバックを提供できます。コールバックを実装するには、OSS に送信するリクエストに対応するコールバックパラメーターを含めるだけです。

次のコードを使用して、ファイルアップロード時にコールバック関数を設定できます。

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)

	// OSS クライアントを作成します。
	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)
}

関連ドキュメント

  • 単純なアップロードの完全なサンプルコードについては、GitHub の「put_object.go」および「put_object_from_file.go」の例をご参照ください。

  • 単純なアップロードの API 操作の詳細については、「PutObject」および「PutObjectFromFile」をご参照ください。