ネットワークが不安定な場合、またはプログラムの例外が発生した場合、サイズが5 GBを超える大きなオブジェクトをobject Storage Service (OSS) にアップロードできません。 場合によっては、オブジェクトが何度もアップロードされないことがあります。 この場合、再開可能なアップロードを実行してラージオブジェクトをアップロードできます。 オブジェクトを複数のパーツに分割し、パーツを並行してアップロードすると、アップロードを高速化できます。 再開可能なアップロード中、アップロードの進行状況はチェックポイントファイルに記録されます。 パーツのアップロードに失敗した場合、次のアップロードはチェックポイントファイルに記録されている位置から開始されます。 すべてのパーツがアップロードされると、すべてのパーツが完全なオブジェクトに結合されます。
使用上の注意
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 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。 |
オプション | アップロードのオプション。 有効な値:
説明 詳細については、「オブジェクトメタデータの管理」をご参照ください。 |
例
次のサンプルコードは、再開可能なアップロードを実行する方法の例を示します。
パッケージメイン
import (import (import)
"fmt"
"os"
「github.com/aliyun/aliyun-oss-go-sdk/oss」
)
func main() {
// 環境変数からアクセス資格情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_IDおよびOSS_ACCESS_KEY_SECRET環境変数が設定されていることを確認してください。
provider, err := oss.NewEnvironmentVariableCredentialsProvider()
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// Create an OSSClient instance.
// バケットが配置されているリージョンのエンドポイントを指定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントをhttps://oss-cn-hangzhou.aliyuncs.comに設定します。 実際のエンドポイントを指定します。
client, err := oss.New("yourEndpoint", ", " ", ", oss.SetCredentialsProvider(&provider))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// バケットの名前を指定します。 例: examplebucket.
bucket, err := client.Bucket("examplebucket")
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
// UploadFileを使用して再開可能なアップロードを実行する場合、部品の数は10000を超えることはできません。
// アップロードするオブジェクトのサイズに基づいて、各パーツのサイズを指定します。 各パーツのサイズは100 KBから5 GBです。 デフォルト値: 100 KB (100x1024) 。
// oss.Routinesを使用して、並行してアップロードできるパーツの数を3に設定します。
// オブジェクトのフルパスを指定します。 バケット名をフルパスに含めないでください。 例: exampledir/exampleobject.txt。
// ローカルファイルのフルパスを指定します。 例: D :\\ localpath\\examplefile.txt。 デフォルトでは、ローカルファイルのパスを指定しない場合、サンプルプログラムが属するプロジェクトのパスからファイルがアップロードされます。
err = bucket.UploadFile("exampledir/exampleobject.txt", "D :\\ localpath\\examplefile.txt", 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
if err! =nil {
fmt.Println("Error:", err)
os.Exit(-1)
}
}
FAQ
再開可能なアップロードを実行すると、「パーツが多すぎます。パーツサイズを増やしてください」と報告された場合はどうすればよいですか?
参考資料
再開可能アップロードの実行に使用される完全なサンプルコードについては、『GitHub』をご参照ください。