大きなオブジェクトをダウンロードする必要がある場合、またはダウンロードの完了に長い時間がかかる場合は、ストリーミングダウンロードを実行して、オブジェクトを増分単位でダウンロードできます。
ストリーミングダウンロードを実行してオブジェクトをダウンロードし、オブジェクトの入力ストリームを取得できます。 ストリーミングダウンロードを実行するには、オブジェクトに対する読み取り権限が必要です。
使用上の注意
このトピックのサンプルコードを実行する前に、カスタムドメイン名やSecurity Token Service (STS) などの方法を使用してOSSClientインスタンスを作成する必要があります。 詳細については、「初期化」をご参照ください。
例
次のサンプルコードは、ストリーミングダウンロードを同期的に実行する方法の例を示しています。
// オブジェクトのダウンロード要求を作成します。
// バケットの名前とオブジェクトの完全パスを指定します。 この例では、バケット名はexamplebucketで、オブジェクトの完全パスはexampledir/exampleobject.txtです。 オブジェクトのフルパスにバケット名を含めないでください。
GetObjectRequest get = new GetObjectRequest("examplebucket", "exampledir/exampleobject.txt");
// ダウンロードの進行状況コールバックを設定します。
get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() {
@オーバーライド
public void onProgress(GetObjectRequest request, long currentSize, long totalSize) {
OSSLog.logDebug("getobj_progress: " + currentSize + "total_size: " + totalSize, false);
}
});
try {
// ダウンロード要求を同期して処理し、結果を取得します。
GetObjectResult getResult = oss.getObject(get);
Log.d("Content-Length", "+ getResult.getContentLength());
// オブジェクトの入力ストリームを取得します。
InputStream inputStream = getResult.getObjectContent();
byte[] buffer = new byte[2048];
int len;
while ((len = inputStream.read(buffer)) ! = -1) {
// ダウンロードしたデータを処理します。 たとえば、画像を表示したり、オブジェクトに書き込み操作を実行したりします。
}
// オブジェクトメタデータを表示します。
ObjectMetadata metadata = getResult.getMetadata();
Log.d("ContentType", metadata.getContentType());
} 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());
} catch (IOException e) {
e.printStackTrace();
}
次のサンプルコードは、ストリーミングダウンロードを非同期で実行する方法の例を示しています。
// オブジェクトのダウンロード要求を作成します。
// バケットの名前とオブジェクトの完全パスを指定します。 この例では、バケット名はexamplebucketで、オブジェクトの完全パスはexampledir/exampleobject.txtです。
// オブジェクトのフルパスにバケット名を含めないでください。
GetObjectRequest get = new GetObjectRequest("examplebucket", "exampledir/exampleobject.txt");
// ダウンロードの進行状況コールバックを設定します。
get.setProgressListener(new OSSProgressCallback<GetObjectRequest>() {
@オーバーライド
public void onProgress(GetObjectRequest request, long currentSize, long totalSize) {
OSSLog.logDebug("getobj_progress: " + currentSize + "total_size: " + totalSize, false);
}
});
OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@オーバーライド
public void onSuccess(GetObjectRequest request, GetObjectResult result) {
// リクエストが成功しました。
InputStream inputStream = result.getObjectContent();
byte[] buffer = new byte[2048];
int len;
try {
while ((len = inputStream.read(buffer)) ! = -1) {
// ダウンロードしたデータを処理します。
}
} catch(IOException e){
e.printStackTrace();
}
}
@オーバーライド
public void onFailure(GetObjectRequest 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());
}
}
});