オブジェクトのダウンロード
このセクションのSDKを使用すると、特定のオブジェクトまたはオブジェクトのバージョンをダウンロードできます。以下のコードスニペットで使用されているBucket参照は、コンポーネントインスタンスです。
ダウンロード操作の最初のステップは、バケットから必要なオブジェクトを取得するGET操作です。
オブジェクトをダウンロードするには、リクエスターにREADアクセス権限が必要です。ただし、バケットの所有者は、必要なレスポンスヘッダーを使用せずにオブジェクトをダウンロードできるよう、ユーザーにREADアクセス権限を付与するオプションがあります。
バケットでバージョニングが有効な場合、特定のバージョンのオブジェクトをダウンロードするにはversionIdを渡す必要があります。versionIdが渡されない場合、デフォルトでオブジェクトの最新バージョンがダウンロードされます。
バケットでバージョニングが有効にされた後、無効にされた場合、デフォルトでプリンシパルの最初のオブジェクトがダウンロードされます。このオブジェクトの最新バージョンをダウンロードするには、versionIdパラメータに値「topVersion」を渡す必要があります。
サンプルコードスニペット
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.io.*;
InputStream dataStream = bucket.getObject("sam/out/sample.txt");
// オブジェクトをローカルマシンにダウンロードする
Path path = Path.of("file_path"); // ダウンロードしたオブジェクトを保存するパスを指定する
Files.copy(dataStream, path, StandardCopyOption.REPLACE_EXISTING);
オブジェクトの一部をダウンロード
以下のSDKはsetRange()メソッドを実装しています。このメソッドを使用すると、オブジェクトの特定のバイト範囲をダウンロードできます。
サンプルコードスニペット
import com.zc.component.stratus.beans.ZCGetObjectOptions;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.io.*;
// ダウンロードオプションを追加する
ZCGetObjectOptions options = ZCGetObjectOptions.getInstance();
options.setVersionId("3yt5ehjbjghds3i28");
options.setRange("20-200"); // オブジェクトのバイト単位の開始・終了範囲
InputStream dataStream = bucket.getObject("sam/out/sample.txt", options);
// オブジェクトをローカルマシンにダウンロードする
Path path = Path.of("file_path"); // ダウンロードしたオブジェクトを保存するパスを指定する
Files.copy(dataStream, path, StandardCopyOption.REPLACE_EXISTING);
Transfer Managerを使用したオブジェクトのダウンロード
このセクションでは、Transfer Manager技法を使用して、Stratusからローカルシステムに大きなオブジェクトを正常にダウンロードするためのSDKメソッドを説明します。Transfer Managerは、大きなオブジェクトをオブジェクトの開始バイトと終了バイトの範囲を使用して複数のバイト範囲に分割する操作です。オブジェクトの各パーツはストリームとして返され、ローカルシステムにダウンロードされます。
Transfer Managerインスタンスの作成
サンプルコードスニペット
import com.zc.component.stratus.transfer.ZCTransferManager;
ZCTransferManager transferManager= ZCTransferManager.getInstance(bucket);
イテラブルパーツストリームとしてオブジェクトをダウンロード
サンプルコードスニペット
import java.nio.file.StandardOpenOption;
import java.nio.file.Files;
import java.util.Iterator;
import java.nio.file.Path;
import java.io.*;
Iterable <InputStream> Iterable = transferManager.getIterableObject("sam/out/sample.txt", 100 L);
Path path = Path.of("file_path");
Iterator <InputStream> res = Iterable.iterator();
while (res.hasNext()) {
InputStream data = res.next(); // オブジェクトの各パーツをストリームとして取得する
Files.copy(data, path, StandardCopyOption.REPLACE_EXISTING); // ストリームをローカルファイルパスに書き込む
}
ダウンロード用のオブジェクトパーツの生成
このSDKメソッドでは、必要な開始バイトと終了バイトの範囲内にあるオブジェクトの一部をダウンロードします。
使用パラメータ
- PartSize:各パーツのサイズ(MB単位)
- key:オブジェクトの名前を保持します
サンプルコードスニペット
import java.nio.file.StandardOpenOption;
import java.nio.file.Files;
import com.zc.component.stratus.beans.ZCStratusGetObject;
import java.nio.file.Path;
import java.io.*;
Path path = Path.of("file_path");
// パート関数のリストを取得する
List<ZCStratusGetObject> parts = transferManager.generatePartDownloaders("sam/out/sample.txt", 100L);
// ダウンロードしたストリームを保存するファイルを作成する。
Files.createFile(path);
int partNumber = 1;
// 各関数をトリガーしてオブジェクトパーツをダウンロードする
for (ZCStratusGetObject part : parts) {
// オブジェクトパーツをストリームとして取得する
InputStream inputStream = part.getPart();
System.out.println("Part "+ partNumber++ + " Downloaded");
// ストリームデータをローカルマシンに書き込む
Files.write(path, inputStream.readAllBytes(), StandardOpenOption.APPEND);
}
オブジェクトダウンロード用のPresigned URLの生成
Presigned URLは、認証済みユーザーが非認証ユーザーと共有できる安全なURLです。このURLにより、非認証ユーザーにオブジェクトへのアクセスに対する一時的な認可が提供されます。以下のコードスニペットで使用されているBucket参照は、コンポーネントインスタンスです。
使用パラメータ
| パラメータ名 | データ型 | 定義 |
|---|---|---|
| key | String | 必須パラメータです。オブジェクトの完全な名前とパスを保持します。 |
| URL_ACTION | Enum | 必須パラメータです。ダウンロードアクション用のPresigned URLを生成するためのパラメータです。
|
| expiry | String | 任意パラメータです。URLの有効時間(秒単位)。
|
| activeFrom | String | 任意パラメータです。このパラメータには、URLが有効になるまでの時間を指定します。最大値は7日です。デフォルトでは、URLは生成されるとすぐにアクティブになります。 |
サンプルコードスニペット
import com.zc.component.stratus.enums.URL_ACTION;
import org.json.simple.JSONObject;
JSONObject res = bucket.generatePreSignedUrl("sam/out/sample.txt",URL_ACTION.GET);
System.out.println(res.get("signature"));
有効期限およびアクティブ時間付きPresigned URLの生成
サンプルコードスニペット
import com.zc.component.stratus.enums.URL_ACTION;
import org.json.simple.JSONObject;
JSONObject res = bucket.generatePreSignedUrl("object_name",URL_ACTION.GET, "expiry_in","active_from");
System.out.println(res.get("signature"));
ダウンロード用Presigned URLの生成のレスポンス例
{
signature: 'https://sadi-development.zoho stratus.com/_signed/text.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747896279887&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=3YBUX1HFSxNQzQJjFrln82AyJsEEuC5T9dsZwWxGyEE'
}
Presigned URLを使用したオブジェクトアップロードの使用例スニペット
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class Download {
public static void main(String[] args) throws IOException {
// HTTPリクエストを処理するOkHttpClientインスタンスを作成する
OkHttpClient client = new OkHttpClient();
// 署名付きURLでGETリクエストを構築する
Request request1 = new Request.Builder()
.url("https://sadi-development.zohostratus.com/_signed/sam.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747905744487&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=pCjV9xckDOqBCueE_gBeMbp12StddTghBK_8HUwU5k0") // Replace with your actual URL
.build();
// リクエストを実行してレスポンスを処理する
try (Response response1 = client.newCall(request1).execute()) {
// レスポンスが成功したかどうか確認する
if (!response1.isSuccessful()) {
throw new IOException("Unexpected code " + response1);
}
// レスポンスボディをInputStreamとして取得する
ResponseBody body = response1.body();
if (body != null) {
// ファイルをディスクに書き込むストリームを作成する
try (InputStream in = body.byteStream();
OutputStream out = new FileOutputStream("file_path")) { // file_pathを実際のパスに置き換えてください
// レスポンスデータをチャンクで読み取りファイルに書き込む
byte[] buffer = new byte[8192];
int len;
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
// ダウンロード成功後に確認メッセージを表示する
System.out.println("Download complete.");
}
}
} catch (IOException e) {
// ダウンロード中にエラーが発生した場合にスタックトレースを表示する
e.printStackTrace();
}
}
}
最終更新日 2026-03-30 13:40:30 +0530 IST
Yes
No
Send your feedback to us