オブジェクトをダウンロードする際に、1 つ以上の条件を指定できます。指定された条件が満たされた場合、オブジェクトはダウンロードされます。それ以外の場合、オブジェクトはダウンロードされず、エラーが返されます。
注意事項
このトピックのサンプルコードを実行する前に、カスタムドメイン名や Security Token Service (STS) などのメソッドを使用して OSSClient インスタンスを作成する必要があります。詳細については、「初期化 (Android SDK)」をご参照ください。
条件
OSS は、次の条件をサポートしています。
If-Modified-Since と If-Unmodified-Since は併用できます。If-Match と If-None-Match も併用できます。
ETag を取得するには、ossClient.getObjectMeta メソッドを使用します。
パラメーター | 説明 |
If-Modified-Since | 指定された時刻が実際の変更時刻より前の場合、ファイルは転送されます。それ以外の場合、304 Not Modified エラーが返されます。 |
If-Unmodified-Since | 指定された時刻が実際の変更時刻と同じかそれ以降の場合、ファイルは転送されます。それ以外の場合、412 Precondition Failed エラーが返されます。 |
If-Match | 指定された ETag が OSS オブジェクトの ETag と一致する場合、ファイルは転送されます。それ以外の場合、412 Precondition Failed エラーが返されます。 |
If-None-Match | 指定された ETag が OSS オブジェクトの ETag と一致しない場合、ファイルは転送されます。それ以外の場合、304 Not Modified エラーが返されます。 |
サンプルコード
次のサンプルコードは、条件付きダウンロードを実行する方法の例を示しています。
// バケット名 (examplebucket など) とオブジェクトの完全なパス (exampledir/exampleobject.txt など) を設定します。
// オブジェクトの完全なパスにバケット名を含めることはできません。
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
// オブジェクトをダウンロードするリクエストを作成します。
Map<String, String> headers = new HashMap<>();
// 指定した時刻がオブジェクトの最終更新時刻より前の場合、オブジェクトはダウンロードされます。それ以外の場合、304 Not modified エラーが返されます。
headers.put(OSSHeaders.GET_OBJECT_IF_MODIFIED_SINCE, "Fri, 13 Nov 2015 14:47:53 GMT");
// 指定した時刻がオブジェクトの最終更新時刻と同じかそれ以降の場合、オブジェクトはダウンロードされます。それ以外の場合、412 Precondition failed エラーが返されます。
// headers.put(OSSHeaders.GET_OBJECT_IF_UNMODIFIED_SINCE, "Fri, 13 Nov 2015 14:47:53 GMT");
// 指定した ETag がオブジェクトの ETag と一致する場合、オブジェクトはダウンロードされます。それ以外の場合、412 Precondition failed エラーが返されます。
// headers.put(OSSHeaders.GET_OBJECT_IF_MATCH, "5B3C1A2E0563E1B002CC607C*****");
// 指定した ETag がオブジェクトの ETag と一致しない場合、オブジェクトはダウンロードされます。それ以外の場合、304 Not modified エラーが返されます。
// headers.put(OSSHeaders.GET_OBJECT_IF_NONE_MATCH, "5B3C1A2E0563E1B002CC607C*****");
GetObjectRequest get = new GetObjectRequest(bucketName, objectKey);
get.setRequestHeaders(headers);
OSSAsyncTask task = oss.asyncGetObject(get, new OSSCompletedCallback<GetObjectRequest, GetObjectResult>() {
@Override
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();
}
}
@Override
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());
}
}
});