最終更新日:2025-08-18 15:54:18
WOS Java SDK は、包括的なオブジェクトダウンロードインターフェースを提供しています。WosClient.getObject を使用してオブジェクトをダウンロードできます。
以下のコードは、ストリームダウンロードの方法を示しています。
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient インスタンスの作成
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
WosObject wosObject = wosClient.getObject("bucketname", "objectname");
// オブジェクトの内容を読み取る
System.out.println("Object content:");
InputStream input = wosObject.getObjectContent();
byte[] b = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int len;
while ((len = input.read(b)) != -1) {
bos.write(b, 0, len);
}
System.out.println(new String(bos.toByteArray()));
bos.close();
input.close();
補足:
WosClient.getObject は、バケット名、オブジェクトキー、オブジェクトのメタデータ、オブジェクトの入力ストリームなどを含む WosObject インスタンスを返します。重要:
WosObject.getObjectContentから取得した入力ストリームは、必ず明示的にクローズしてリソースリークを防いでください。
オブジェクトの一部のみをダウンロードしたい場合、レンジダウンロードを利用して指定した範囲のデータを取得できます。例えば、0-1000 の範囲を指定すると、バイト 0 から 1000(両端を含む)まで、合計 1001 バイト([0, 1000])が返されます。不正な範囲を指定した場合は、オブジェクト全体が返されます。以下はレンジダウンロードの例です。
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient インスタンスの作成
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
GetObjectRequest request = new GetObjectRequest("bucketname", "objectname");
// 開始位置と終了位置を指定
request.setRangeStart(0L);
request.setRangeEnd(1000L);
WosObject wosObject = wosClient.getObject(request);
// データの読み取り
byte[] buf = new byte[1024];
InputStream in = wosObject.getObjectContent();
for (int n = 0; n != -1;) {
n = in.read(buf, 0, buf.length);
}
in.close();
補足:
オブジェクトをダウンロードする際に制約条件を指定できます。条件を満たさない場合は例外が発生し、ダウンロードは失敗します。
利用可能な条件指定パラメーターは下記の通りです。
| パラメータ | 説明 | Java SDK メソッド |
|---|---|---|
| If-Modified-Since | 指定された日付以降に変更されていればオブジェクトの内容を返します。そうでなければ例外発生。 | GetObjectRequest.setIfModifiedSince |
| If-Unmodified-Since | 指定された日付以降に変更されていなければオブジェクトの内容を返します。そうでなければ例外発生。 | GetObjectRequest.setIfUnmodifiedSince |
| If-Match | オブジェクトの ETag が指定値と一致すれば内容を返します。そうでなければ例外発生。 | GetObjectRequest.setIfMatchTag |
| If-None-Match | オブジェクトの ETag が指定値と一致しなければ内容を返します。そうでなければ例外発生。 | GetObjectRequest.setIfNoneMatchTag |
補足:
412 Precondition Failed です。304 Not Modified です。String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient インスタンスの作成
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
GetObjectRequest request = new GetObjectRequest("bucketname", "objectname");
request.setRangeStart(0L);
request.setRangeEnd(1000L);
request.setIfModifiedSince(new SimpleDateFormat("yyyy-MM-dd").parse("2016-01-01"));
WosObject wosObject = wosClient.getObject(request);
wosObject.getObjectContent().close();
オブジェクトのダウンロード時に、特定の HTTP/HTTPS レスポンスヘッダーを上書きできます。上書き可能なヘッダーは下記の通りです。
| パラメータ | 説明 | Java SDK メソッド |
|---|---|---|
| contentType | Content-Type ヘッダーを上書き | ObjectRepleaceMetadata.setContentType |
| contentLanguage | Content-Language を上書き | ObjectRepleaceMetadata.setContentLanguage |
| expires | Expires ヘッダーを上書き | ObjectRepleaceMetadata.setExpires |
| cacheControl | Cache-Control ヘッダーを上書き | ObjectRepleaceMetadata.setCacheControl |
| contentDisposition | Content-Disposition を上書き | ObjectRepleaceMetadata.setContentDisposition |
| contentEncoding | Content-Encoding を上書き | ObjectRepleaceMetadata.setContentEncoding |
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient インスタンスの作成
WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
GetObjectRequest request = new GetObjectRequest("bucketname", "objectname");
ObjectRepleaceMetadata replaceMetadata = new ObjectRepleaceMetadata();
replaceMetadata.setContentType("image/jpeg");
request.setReplaceMetadata(replaceMetadata);
WosObject wosObject = wosClient.getObject(request);
System.out.println(wosObject.getMetadata().getContentType());
wosObject.getObjectContent().close();
オブジェクトダウンロード時にユーザー定義のメタデータも取得できます。カスタムメタデータの取得例を以下に示します。
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient インスタンスの作成
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
// カスタムメタデータ付きでオブジェクトをアップロード
PutObjectRequest request = new PutObjectRequest("bucketname", "objectname");
ObjectMetadata metadata = new ObjectMetadata();
metadata.addUserMetadata("property", "property-value");
request.setMetadata(metadata);
wosClient.putObject(request);
// オブジェクトをダウンロードしてカスタムメタデータを取得
WosObject wosObject = wosClient.getObject("bucketname", "objectname");
System.out.println(wosObject.getMetadata().getUserMetadata("property"));
wosObject.getObjectContent().close();
アーカイブストレージクラスに保存されているオブジェクトをダウンロードするには、まず WosClient.restoreObject を使用してリストアする必要があります。アーカイブオブジェクトのダウンロード方法は以下の通りです。
String endPoint = "https://your-endpoint";
String ak = "*** Provide your Access Key ***";
String sk = "*** Provide your Secret Key ***";
// WosClient インスタンスの作成
final WosClient wosClient = new WosClient(ak, sk, endPoint, regionName);
RestoreObjectRequest request = new RestoreObjectRequest();
request.setBucketName("bucketname");
request.setObjectKey("objectname");
request.setDays(1);
wosClient.restoreObject(request);
// オブジェクトのリストア完了まで待機
Thread.sleep(60 * 6 * 1000);
// オブジェクトのダウンロード
WosObject wosObject = wosClient.getObject("bucketname", "objectname");
wosObject.getObjectContent().close();
補足:
WosClient.restoreObject で指定するオブジェクトはアーカイブストレージクラスである必要があります。そうでない場合、例外が発生します。