このトピックでは、ローカルコンピュータにオブジェクトをダウンロードする方法について説明します。
使用上の注意
このトピックのサンプルコードを実行する前に、カスタムドメイン名または Security Token Service ( STS ) を使用などの方法で OSSClient インスタンスを作成する必要があります。詳細については、「初期化」をご参照ください。
権限
デフォルトでは、Alibaba Cloud アカウントは、アカウント内のリソースに対するフルアクセス権限を持っています。一方、RAM ユーザーと Alibaba Cloud アカウントに関連付けられている RAM ロールは、最初は権限を持っていません。 RAM ユーザーまたはロールを使用してリソースを管理するには、RAM ポリシーまたはバケットポリシーを使用して必要な権限を付与する必要があります。
API | アクション | 説明 |
GetObject |
| オブジェクトをダウンロードする権限を付与します。 |
| オブジェクトバージョンを照会する権限を付与します。この権限は、オブジェクトの特定のバージョンをダウンロードする場合に必要です。 | |
| Key Management Service ( KMS ) 復号を使用する権限を付与します。この権限は、x-oss-server-side-encryption ヘッダーを指定して暗号化したオブジェクトを部分的にダウンロードする場合に必要です。 |
例
次のコードは、特定のオブジェクトをローカルコンピュータにダウンロードする方法の例を示しています。
// オブジェクトダウンロードリクエストを構築します。
// バケット名とオブジェクトの完全なパスを指定します。この例では、バケット名は examplebucket で、オブジェクトの完全なパスは exampledir/exampleobject.txt です。完全なパスにバケット名を含めないでください。
GetObjectRequest get = new GetObjectRequest("examplebucket", "exampledir/exampleobject.txt");
oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@Override
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// データの読み取りを開始します。
long length = result.getContentLength();
if (length > 0) {
byte[] buffer = new byte[(int) length];
int readCount = 0;
while (readCount < length) {
try{
readCount += result.getObjectContent().read(buffer, readCount, (int) length - readCount);
}catch (Exception e){
OSSLog.logInfo(e.toString());
}
}
// ダウンロードしたオブジェクトの完全なパスを指定します。例:D:\\localpath\\exampleobject.jpg。
try {
FileOutputStream fout = new FileOutputStream("download_filePath");
fout.write(buffer);
fout.close();
} catch (Exception e) {
OSSLog.logInfo(e.toString());
}
}
}
@Override
public void onFailure(GetObjectRequest request, ClientException clientException,
ServiceException serviceException) {
}
});