すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:条件付きダウンロード

最終更新日:Mar 05, 2024

オブジェクトをダウンロードするときに、1つ以上の条件を指定できます。 指定された条件が満たされると、オブジェクトがダウンロードされます。 それ以外の場合、オブジェクトはダウンロードされず、エラーが返されます。

使用上の注意

  • このトピックのサンプルコードを実行する前に、カスタムドメイン名やSecurity Token Service (STS) などの方法を使用してOSSClientインスタンスを作成する必要があります。 詳細については、「初期化」をご参照ください。

ダウンロード条件

利用可能なオブジェクトのダウンロード条件を次の表に示します。

説明
  • "If-Modified-Since" と "If-Unmodified-Since" の両方が、オブジェクトのダウンロード条件と同時に存在することがあります。 "If-Match" と "If-None-Match" の両方が、オブジェクトのダウンロード条件と同時に存在することがあります。

  • ossClient.getObjectMetaを使用してETagを取得できます。

パラメーター

説明

If-Modified-Since

指定された時刻がオブジェクトが変更された時刻よりも早い場合、オブジェクトをダウンロードできます。 それ以外の場合、304 Not Modifiedが返されます。

If-Unmodified-Since

指定された時刻が、オブジェクトが変更された時刻よりも後か等しい場合、オブジェクトをダウンロードできます。 そうでない場合、412 Precondition Failedが返されます。

If-Match

指定された ETag がオブジェクトのものと一致すれば、そのオブジェクトをダウンロードすることができます。 そうでない場合、412 Precondition Failedが返されます。

If-None-Match

指定された ETag がオブジェクトのものと一致しない場合は、オブジェクトをダウンロードできます。 それ以外の場合、304 Not Modifiedが返されます。

次のサンプルコードは、条件付きダウンロードの実行方法の例を示しています。

// バケットの名前とオブジェクトの完全パスを指定します。 この例では、バケットの名前はexamplebucketで、オブジェクトの完全パスはexampledir/exampleobject.txtです。 
// オブジェクトのフルパスにバケット名を含めないでください。 
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
// オブジェクトをダウンロードするリクエストを作成します。 
Map<String, String> headers = new HashMap<>();
// 指定された時刻が、オブジェクトが最後に変更された時刻よりも早い場合、オブジェクトをダウンロードできます。 それ以外の場合、変更されていない304が返されます。 
headers.put(OSSHeaders.GET_OBJECT_IF_MODIFIED_SINCE、「金、11月2015日14:47:53 GMT」);
// 指定された時刻が、オブジェクトが最後に変更された時刻以降の場合、オブジェクトをダウンロードできます。 そうでなければ、412 Precondition failedが返されます。
// headers.put(OSSHeaders.GET_OBJECT_IF_UNMODIFIED_SINCE、「金曜日、11月2015日14:47:53 GMT」);
// 指定されたETagがオブジェクトのETagと一致する場合、オブジェクトをダウンロードできます。 そうでなければ、412 Precondition failedが返されます。
// headers.put(OSSHeaders.GET_OBJECT_IF_MATCH、"5B3C1A2E0563E1B002CC607C *****");
// 指定されたETagがオブジェクトのETagと一致しない場合、オブジェクトをダウンロードできます。 それ以外の場合、変更されていない304が返されます。
// 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>() {
    @オーバーライド
    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());
        }
    }
});

参考資料

  • 条件付きダウンロードの実行に使用される完全なサンプルコードについては、『GitHub』をご参照ください。

  • 条件付きダウンロードを実行するために呼び出すことができるAPI操作の詳細については、「GetObject」をご参照ください。

  • OSSClientインスタンスを初期化する方法の詳細については、「初期化」をご参照ください。