オブジェクトのアップロード
このセクションに記載されているSDKメソッドを使用すると、さまざまな方法でバケットにオブジェクトをアップロードできます。オブジェクトを文字列またはストリームとしてアップロードできます。以下のコードスニペットで使用されているBucket参照は、コンポーネントインスタンスです。
オブジェクトに対してバージョニングが有効になっていない場合、Stratusが同じオブジェクトに対して複数の書き込みリクエストを受け取ると、オブジェクトは継続的に上書きされます。最新のアップロードのオブジェクトのみが保存されます。
ただし、バージョニングを有効にすると、各アップロードはオブジェクトのバージョンとみなされ、すべてが一意のversionIdとともにバケットに保存されます。
ストリームとしてオブジェクトをアップロード
このSDKメソッドを使用して、ストリームとしてバケットにオブジェクトをアップロードできます。ストリームを変数に格納してから、その変数をアップロードメソッドに渡します。
サンプルコードスニペット
import com.zc.component.stratus.beans.ZCPutObjectOptions;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.io.*;
InputStream file =new FileInputStream("filePath");
Boolean res = bucket.putObject("sam/out/sample.txt", file);
System.out.println(res);
文字列としてオブジェクトをアップロード
このSDKメソッドを使用して、オブジェクトを文字列としてアップロードできます。アップロードメソッドputObject()にオブジェクト名とオブジェクトに格納するデータを文字列形式で渡します。
サンプルコードスニペット
import com.zc.component.stratus.beans.ZCPutObjectOptions;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.io.*;
Boolean res = bucket.putObject("sam/out/sample.txt", "content of the file");
System.out.println(res);
オプション付きでオブジェクトをアップロード
このSDKメソッドを使用して、オブジェクトのアップロード時に以下のオプションを使用できます。
-
setOverwrite():バケットのバージョニングが有効になっていない場合に使用できるオプションです。バージョニングなしでリソースを上書きする場合にこのオプションを使用する必要があります。デフォルト値は「false」です。
-
setTTL():オブジェクトのTime-to-Live(TTL)を秒単位で設定するためのオプションです。値は60秒以上である必要があります。
-
setMetaData():アップロードするオブジェクトのメタ詳細をアップロードするためのオプションです。
-
contentType:オブジェクトのMIMEタイプを設定する必要がある場合に使用できるオプションです。
サンプルコードスニペット
import com.zc.component.stratus.beans.ZCPutObjectOptions;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.Map;
import java.io.*;
ZCPutObjectOptions options = ZCPutObjectOptions.getInstance();
options.setTTL("1000");
options.setOverwrite("true");
Map<String, String> metaData = new HashMap<String, String>();
metaData.put("author", "John");
options.setMetaData(metaData);
InputStream file = new FileInputStream("filePath");
Boolean res = bucket.putObject("sam/out/sample.txt", file, options);
System.out.println(res);
展開オプション付きでオブジェクトをアップロード
putZipObject() SDKメソッドを使用してZipオブジェクトをアップロードすると、Zip内のオブジェクトが展開されてアップロードされます。
サンプルコードスニペット
import com.zc.component.stratus.ZCBucket;
import com.zc.component.stratus.ZCStratus;
import com.zc.component.stratus.beans.ZCPutObjectOptions;
ZCStratus stratus = ZCStratus.getInstance();
ZCBucket bucket = stratus.bucketInstance("sam1");
ZCPutObjectOptions options = ZCPutObjectOptions.getInstance();
options.setOverwrite("true");
InputStream stream = new FileInputStream("file_path");
JSONObject object = bucket.putZipObject("sam.zip", stream, options);
このSDKメソッドはtaskIdの値を返します。この値を使用して、こちらのSDKメソッドで展開のステータスを確認できます。
レスポンス例
{ 'task_id': '1234263749' }
マルチパート操作によるオブジェクトのアップロード
アップロードするオブジェクトが大きすぎてアップロードできない場合、マルチパート操作を実行できます。マルチパート操作では、オブジェクトを複数のパーツに分割し、より高速なアップロードを実行します。このSDKセクションでは、Stratusでオブジェクトのマルチパートアップロードを実行するために利用可能なすべてのSDKメソッドを説明します。
マルチパートアップロードの開始
以下のSDKメソッドを使用して、uploadIdを返します。このIDにより、オブジェクトの複数のパーツをアップロードできます。
サンプルコードスニペット
import com.zc.component.stratus.beans.ZCInitiateMultipartUpload;
ZCInitiateMultipartUpload multipart = bucket.initiateMultipartUpload("sam/out/sample.txt");
オブジェクトのパーツのマルチパートアップロードの実行
以下のSDKメソッドでは、オブジェクトの個々のパーツのアップロードを実行します。各パーツには1から1000の範囲の固有のpart_numberがあります。これはパーツの順序を表しますが、これらのパーツは必ずしも順番にアップロードされるわけではありません。オブジェクトのすべてのパーツのアップロードが完了すると、これらのパーツは順番に結合されます。
使用パラメータ
| パラメータ名 | データ型 | 定義 |
|---|---|---|
| key | String | 必須パラメータです。オブジェクトの名前を保持します。 |
| uploadId | String | 必須パラメータです。この値はマルチパートアップロードの開始メソッドで返されます。 |
| part | InputStream | 必須パラメータです。オブジェクトパーツのデータを保持します。 |
| partNumber | Int | 必須パラメータです。アップロードされるパーツの順序を保持します。 |
サンプルコードスニペット
import java.io.*;
int partNumber = 1;
InputStream part = new FileInputStream("filePath");
Boolean res = bucket.uploadPart("sam/out/sample.txt", "uploadId", part, partNumber);
System.out.println(res);
マルチパートアップロードのサマリー取得
以下のSDKメソッドを使用して、アップロードされたすべてのパーツの操作サマリーを取得できます。サマリーを表示するには、getMultipartUploadSummary()メソッドにuploadIdを渡します。
サンプルコードスニペット
import com.zc.component.stratus.beans.ZCMultipartObjectSummary;
ZCMultipartObjectSummary summaryRes = bucket.getMultipartUploadSummary("sam/out/sample.txt", "uploadId");
// アップロード済みパーツにアクセスする
System.out.println("Object Name:" + summaryRes.getKey());
System.out.println("Upload Id:" + summaryRes.getUploadId());
System.out.println("Status:" + summaryRes.getStatus());
System.out.println(summaryRes.getParts().get(0).getUploadedAt());
System.out.println(summaryRes.getParts().get(0).getPartNumber());
マルチパートアップロード操作の完了
以下のメソッドを使用すると、すべてのパーツが正常にアップロードされた後にマルチパートプロセスを終了できます。プロセスを完了するには、completeMultipartUpload()メソッドにuploadIdを渡します。
Boolean completeRes = bucket.completeMultipartUpload("sam/out/sample.txt", "uploadId");
System.out.println(completeRes);
マルチパート操作の実装を示すサンプルスニペット
サンプルコードスニペット
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.logging.Logger;
import java.util.logging.Level;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.catalyst.advanced.CatalystAdvancedIOHandler;
import com.zc.component.stratus.ZCBucket;
import com.zc.component.stratus.ZCStratus;
import com.zc.component.stratus.beans.ZCInitiateMultipartUpload;
import com.zc.exception.ZCServerException;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.ByteArrayInputStream;
public class MultipartUpload implements CatalystAdvancedIOHandler {
private static final Logger LOGGER = Logger.getLogger(Sample.class.getName());
@Override
public void runner(HttpServletRequest request, HttpServletResponse response) throws Exception {
try {
switch (request.getRequestURI()) {
case "/": {
ZCStratus stratus = ZCStratus.getInstance();
// バケットインスタンスを取得する
ZCBucket bucket = stratus.bucketInstance("sample");
// マルチパートアップロード
String key = "sample.mp4";
InputStream file = new FileInputStream(
"/users/sam/sample.mp4");
ZCInitiateMultipartUpload initiateUploadResponse = bucket.initiateMultipartUpload(key);
String uploadId = initiateUploadResponse.getUploadId();
System.out.println("Multipart upload initiated. Upload ID: " + uploadId);
// ファイルサイズとパートサイズ(最小50 MB)
int partSize = 50 * 1024 * 1024; // 50 MB
long fileSize = file.available();
double result = (double) fileSize / partSize;
int noOfParts = (int) Math.ceil(result);
// パーツを並列でアップロードする
List<CompletableFuture<Void>> uploadedParts = new ArrayList<>();
ExecutorService executor = Executors.newFixedThreadPool(4);
int partNumber = 1;
while (noOfParts >= partNumber) {
int currentPartNumber = partNumber;
byte[] buffer = new byte[partSize];
file.read(buffer);
InputStream fileData = new ByteArrayInputStream(buffer);
uploadedParts.add(CompletableFuture.runAsync(() -> {
try {
bucket.uploadPart(key, uploadId, fileData, currentPartNumber);
LOGGER.log(Level.INFO, "Part {0} Uploaded", currentPartNumber);
} catch (Exception e) {
throw new RuntimeException(e);
}
}, executor));
partNumber++;
}
CompletableFuture<Void> isUploaded = CompletableFuture
.allOf(uploadedParts.toArray(new CompletableFuture[0]));
try {
isUploaded.get();
} catch (Exception e) {
throw new ZCServerException("Error while uploading the object", e);
}
Boolean completeRes = bucket.completeMultipartUpload(key, uploadId);
if (completeRes) {
LOGGER.log(Level.INFO, "Upload Completed");
}
}
default: {
response.setStatus(404);
response.getWriter().write("You might find the page you are looking for at \"/\" path");
}
}
} catch (Exception e) {
if (e instanceof ZCServerException) {
int statusCode = ((ZCServerException) e).getStatus();
System.out.println("HTTP status code: " + statusCode);
}
LOGGER.log(Level.SEVERE, "Exception in Sample", e);
}
}
}
Transfer Managerを使用したオブジェクトのアップロード
Transfer Managerインスタンスの作成
サンプルコードスニペット
import com.zc.component.stratus.transfer.ZCTransferManager;
ZCTransferManager transferManager= ZCTransferManager.getInstance(bucket);
マルチパートアップロード
マルチパートアップロードインスタンスの作成
以下のSDKメソッドは、マルチパートアップロードを開始してマルチパートインスタンスを作成します。
サンプルコードスニペット
import com.zc.component.stratus.beans.ZCMultipartUpload;
ZCMultipartUpload multipart = transferManager.createMultipartInstance("sam/out/sample.txt");
既に初期化されたマルチパートアップロード操作用のインスタンスを作成する必要がある場合は、以下のコードスニペットをコピーして使用してください。
ZCMultipartUpload multipart = transferManager.createMultipartInstance("sam/out/sample.txt", "uploadId");
パーツのアップロード
以下のSDKメソッドでは、マルチパートアップロードインスタンスの作成セクションで初期化したmultipartインスタンスを使用します。
サンプルコードスニペット
import java.io.InputStream;
int partNumber = 1;
InputStream part = new FileInputStream("filePath");
Boolean uploadRes = multipart.uploadPart(part, partNumber);
System.out.println(uploadRes);
アップロードサマリー
サンプルコードスニペット
import com.zc.component.stratus.beans.ZCMultipartObjectSummary;
ZCMultipartObjectSummary summaryRes = multipart.getUploadSummary();
// アップロード済みパーツにアクセスする
System.out.println("Object Name:" + summaryRes.getKey());
System.out.println("Upload Id:" + summaryRes.getUploadId());
System.out.println("Status:" + summaryRes.getStatus());
System.out.println(summaryRes.getParts().get(0).getUploadedAt());
System.out.println(summaryRes.getParts().get(0).getPartNumber());
System.out.println(summaryRes.getParts().get(0).getSize());
アップロードの完了
Boolean completeRes = multipart.completeUpload();
System.out.println(completeRes);
ラッパーを使用したオブジェクトのアップロード
以下のSDKメソッドはラッパーとして機能し、複数のステップを実行することなくマルチパートアップロード操作全体を実行します。このメソッドを使用すると、オブジェクトが複数のパーツに分割され、複数のパーツでバケットにアップロードされ、すべてのパーツがアップロードされると結合されます。
import java.io.InputStream;
import com.zc.component.stratus.beans.ZCMultipartObjectSummary;
InputStream file =new FileInputStream("filePath");
int partSize = 50;
ZCMultipartObjectSummary res = transferManager.putObjectAsParts("objetName", file, partSize);
オブジェクトアップロード用の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.PUT);
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.zohostratus.com/_signed/sam.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747904989454&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=UPyH5A4AdAaCpw6S6jVhKFSxg3B0B0p619YN0cAIn4c",
"expiry_in_seconds": "100",
"active_from": "1726492859577"
}
Presigned URLを使用したオブジェクトアップロードの使用例スニペット
import okhttp3.*;
import java.io.File;
import java.io.IOException;
public class BinaryFileUpload {
public static void main(String[] args) throws IOException {
// HTTPリクエスト用のOkHttpClientインスタンスを作成する
OkHttpClient client = new OkHttpClient();
// アップロードするファイルを指定する。「file_path」を実際のファイルの場所に置き換えてください
File file = new File("file_path");
// バイナリコンテンツ(octet-stream)でリクエストボディを作成する
RequestBody requestBody = RequestBody.create(
MediaType.parse("application/octet-stream"), // 既知の場合は特定のMIMEタイプを使用
file
);
// ️ 署名付きURLでPUTリクエストを構築する
Request request = new Request.Builder()
.url("https://sadi-development.zohostratus.com/_signed/sam.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747904989454&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=UPyH5A4AdAaCpw6S6jVhKFSxg3B0B0p619YN0cAIn4c") // Replace with a actual URL
.put(requestBody) // ファイルをアップロードするPUTリクエスト
.build();
// リクエストを実行してレスポンスを処理する
try (Response response = client.newCall(request).execute()) {
if (response.isSuccessful()) {
System.out.println("Object uploaded successfully");
} else {
// アップロード失敗時にエラーを表示する
System.err.println("Error: " + response.code() + " - " + response.body().string());
}
}
}
}
最終更新日 2026-03-30 13:40:30 +0530 IST
Yes
No
Send your feedback to us