ネットワークの不安定性やプログラムの例外が発生した場合、サイズが5 GBを超える大きなオブジェクトをアップロードする場合は、再開可能なアップロードを実行することを推奨します。 オブジェクトを複数のパーツに分割し、パーツを並行してアップロードすることで、プロセスを高速化できます。 再開可能なアップロード中、アップロードの進行状況はチェックポイントファイルに記録されます。 パーツのアップロードに失敗した場合、次のアップロードはチェックポイントファイルに記録されている位置から開始されます。 すべてのパーツがアップロードされると、すべてのパーツが完全なオブジェクトに結合されます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 OSSと同じリージョンにある他のAlibaba CloudサービスからOSSにアクセスする場合は、内部エンドポイントを使用します。 OSSリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス資格情報は環境変数から取得します。 アクセス資格情報の設定方法の詳細については、「アクセス資格情報の設定」をご参照ください。
このトピックでは、OSSエンドポイントを使用してOSSClientインスタンスを作成します。 カスタムドメイン名またはSTS (Security Token Service) を使用してOSSClientインスタンスを作成する場合は、「初期化」をご参照ください。
再開可能アップロードを使用するには、
oss:PutObject
権限が必要です。 詳細については、「RAMユーザーへのカスタムポリシーのアタッチ」をご参照ください。アップロードの進行状況はチェックポイントファイルに記録されます。 チェックポイントファイルへの書き込み権限があることを確認してください。
チェックポイントファイルにはチェックサムが含まれています。 このチェックサムは変更できません。 チェックポイントファイルが破損している場合は、オブジェクトのすべての部分を再アップロードする必要があります。
アップロード中にローカルファイルが変更された場合は、オブジェクトのすべての部分を再アップロードする必要があります。
実装方法
再開可能なアップロードを実行するには、Bucket.UploadFileメソッドを使用します。 次の表に、構成可能なパラメーターを示します。
パラメーター | 説明 |
objectKey | OSSオブジェクトの名前。 このパラメーターはobjectNameに相当します。 |
filePath | OSSにアップロードするローカルファイルのパス。 |
partSize | 各部分のサイズ。 有効な値: 100 KB〜5 GB。 デフォルト値: 100 KB。 |
オプション | アップロードのオプション。 有効な値:
説明 詳細については、「オブジェクトメタデータの管理」をご参照ください。 |
例
次のサンプルコードは、再開可能なアップロードを実行する方法の例を示します。
package main
import (
"fmt"
"os"
"github.com/aliyun/aliyun-oss-go-sdk/oss"
)
func main() {
// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err != nil {
log.Fatalf("Failed to create credentials provider: %v", err)
}
// Create an OSSClient instance.
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint.
client, err := oss.New("yourEndpoint", "", "", oss.SetCredentialsProvider(&provider))
if err != nil {
log.Fatalf("Failed to create OSS client: %v", err)
}
// Specify the name of the bucket. Example: examplebucket.
bucket, err := client.Bucket("examplebucket")
if err != nil {
log.Fatalf("Failed to get bucket: %v", err)
}
// When you use UploadFile to perform resumable upload, the number of parts cannot exceed 10000.
// Specify the size of each part based on the size of the object that you want to upload. The size of each part ranges from 100 KB to 5 GB. Default value: 100 KB (100 x 1024).
// Use oss.Routines to set the number of parts that can be uploaded in parallel to 3.
// Specify the full path of the object. Do not include the bucket name in the full path. Example: exampledir/exampleobject.txt.
// Specify the full path of the local file. Example: D:\\localpath\\examplefile.txt. By default, if you do not specify the path of the local file, the file is uploaded from the path of the project to which the sample program belongs.
err = bucket.UploadFile("exampledir/exampleobject.txt", "D:\\localpath\\examplefile.txt", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
if err != nil {
log.Fatalf("Failed to upload file: %v", err)
}
log.Println("File uploaded successfully.")
}
よくある質問
再開可能なアップロードを実行したときに「パーツが多すぎます。パーツサイズを増やしてください」と報告された場合はどうすればよいですか?
関連ドキュメント
再開可能アップロードの実行に使用される完全なサンプルコードについては、『GitHub』をご参照ください。
再開可能なアップロードを実行するために呼び出すことができるAPI操作の詳細については、「UploadFile」をご参照ください。