お知らせ:

当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

オブジェクトのアップロード

このセクションに記載されているSDKメソッドを使用すると、さまざまな方法でバケットオブジェクトをアップロードできます。オブジェクトを文字列またはストリームとしてアップロードできます。以下のコードスニペットで使用されているBucket参照は、コンポーネントインスタンスです。

オブジェクトに対してバージョニングが有効になっていない場合、Stratusが同じオブジェクトに対して複数の書き込みリクエストを受け取ると、オブジェクトは継続的に上書きされます。最新のアップロードのオブジェクトのみが保存されます。

ただし、バージョニングを有効にすると、各アップロードはオブジェクトのバージョンとみなされ、すべてが一意のversionIdとともにバケットに保存されます。

Note: パスまたはオブジェクトを作成する際、スペースを含む以下の文字はサポートされていません:ダブルクォート、両方の山括弧、ハッシュタグ、バックスラッシュ、パイプ記号。

ストリームとしてオブジェクトをアップロード

このSDKメソッドを使用して、ストリームとしてバケットにオブジェクトをアップロードできます。ストリームを変数に格納してから、その変数をアップロードメソッドに渡します。

サンプルコードスニペット


Package Imports
copy
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.*;
copy
InputStream file =new FileInputStream("filePath");
Boolean res = bucket.putObject("sam/out/sample.txt", file);
System.out.println(res);

文字列としてオブジェクトをアップロード

このSDKメソッドを使用して、オブジェクトを文字列としてアップロードできます。アップロードメソッドputObject()にオブジェクト名とオブジェクトに格納するデータを文字列形式で渡します。

サンプルコードスニペット


Package Imports
copy
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.*;
copy
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タイプを設定する必要がある場合に使用できるオプションです。

サンプルコードスニペット


Package Imports
copy
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.*;
copy
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内のオブジェクトが展開されてアップロードされます。

サンプルコードスニペット


Package Imports
copy
import com.zc.component.stratus.ZCBucket;
import com.zc.component.stratus.ZCStratus;
import com.zc.component.stratus.beans.ZCPutObjectOptions;
copy
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メソッドで展開のステータスを確認できます。

レスポンス例

copy
{ 'task_id': '1234263749' }

マルチパート操作によるオブジェクトのアップロード

アップロードするオブジェクトが大きすぎてアップロードできない場合、マルチパート操作を実行できます。マルチパート操作では、オブジェクトを複数のパーツに分割し、より高速なアップロードを実行します。このSDKセクションでは、Stratusでオブジェクトのマルチパートアップロードを実行するために利用可能なすべてのSDKメソッドを説明します。

マルチパートアップロードの開始

以下のSDKメソッドを使用して、uploadIdを返します。このIDにより、オブジェクトの複数のパーツをアップロードできます。

サンプルコードスニペット


Package Imports
copy
import com.zc.component.stratus.beans.ZCInitiateMultipartUpload;
copy
ZCInitiateMultipartUpload multipart = bucket.initiateMultipartUpload("sam/out/sample.txt");

オブジェクトのパーツのマルチパートアップロードの実行

以下のSDKメソッドでは、オブジェクトの個々のパーツのアップロードを実行します。各パーツには1から1000の範囲の固有のpart_numberがあります。これはパーツの順序を表しますが、これらのパーツは必ずしも順番にアップロードされるわけではありません。オブジェクトのすべてのパーツのアップロードが完了すると、これらのパーツは順番に結合されます。

使用パラメータ

パラメータ名 データ型 定義
key String 必須パラメータです。オブジェクトの名前を保持します。
uploadId String 必須パラメータです。この値はマルチパートアップロードの開始メソッドで返されます。
part InputStream 必須パラメータです。オブジェクトパーツのデータを保持します。
partNumber Int 必須パラメータです。アップロードされるパーツの順序を保持します。

サンプルコードスニペット


Package Imports
copy
import java.io.*;
copy
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を渡します。

サンプルコードスニペット


Package Imports
copy
import com.zc.component.stratus.beans.ZCMultipartObjectSummary;
copy
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を渡します。

copy
Boolean completeRes = bucket.completeMultipartUpload("sam/out/sample.txt", "uploadId");
System.out.println(completeRes);

マルチパート操作の実装を示すサンプルスニペット

サンプルコードスニペット


Package Imports
copy
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;
copy
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インスタンスの作成

サンプルコードスニペット


Package Imports
copy
import com.zc.component.stratus.transfer.ZCTransferManager;
copy
ZCTransferManager transferManager= ZCTransferManager.getInstance(bucket);

マルチパートアップロード

マルチパートアップロードインスタンスの作成

以下のSDKメソッドは、マルチパートアップロードを開始してマルチパートインスタンスを作成します。

サンプルコードスニペット


Package Imports
copy
import com.zc.component.stratus.beans.ZCMultipartUpload;
copy
ZCMultipartUpload multipart = transferManager.createMultipartInstance("sam/out/sample.txt");

既に初期化されたマルチパートアップロード操作用のインスタンスを作成する必要がある場合は、以下のコードスニペットをコピーして使用してください。

copy
ZCMultipartUpload multipart = transferManager.createMultipartInstance("sam/out/sample.txt", "uploadId");

パーツのアップロード

以下のSDKメソッドでは、マルチパートアップロードインスタンスの作成セクションで初期化したmultipartインスタンスを使用します。

サンプルコードスニペット


Package Imports
copy
import java.io.InputStream;
copy
int partNumber = 1;
InputStream part = new FileInputStream("filePath");
Boolean uploadRes = multipart.uploadPart(part, partNumber);
System.out.println(uploadRes);

アップロードサマリー

サンプルコードスニペット


Package Imports
copy
import com.zc.component.stratus.beans.ZCMultipartObjectSummary;
copy
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());

アップロードの完了

copy
Boolean completeRes = multipart.completeUpload();
System.out.println(completeRes);

ラッパーを使用したオブジェクトのアップロード

以下のSDKメソッドはラッパーとして機能し、複数のステップを実行することなくマルチパートアップロード操作全体を実行します。このメソッドを使用すると、オブジェクトが複数のパーツに分割され、複数のパーツでバケットにアップロードされ、すべてのパーツがアップロードされると結合されます。

copy
import java.io.InputStream;
import com.zc.component.stratus.beans.ZCMultipartObjectSummary;
copy
InputStream file =new FileInputStream("filePath");
int partSize = 50;
ZCMultipartObjectSummary res = transferManager.putObjectAsParts("objetName", file, partSize);
Note: **2GB**を超えるオブジェクトの場合、マルチパートアップロード操作を正常に実行するために個々のSDKメソッドを使用することをお勧めします。

オブジェクトアップロード用のPresigned URLの生成

Presigned URLは、認証済みユーザーが非認証ユーザーと共有できる安全なURLです。このURLにより、非認証ユーザーにオブジェクトへのアクセスに対する一時的な認可が提供されます。以下のコードスニペットで使用されているBucket参照は、コンポーネントインスタンスです。

Info: このSDKメソッドを使用するには、Adminスコープで初期化する必要があります。この要件の詳細については、こちらのセクションを参照してください。

使用パラメータ

パラメータ名 データ型 定義
key String 必須パラメータです。オブジェクトの完全な名前とパスを保持します。
URL_ACTION Enum 必須パラメータです。アップロードアクション用のPresigned URLを生成するためのパラメータです。
  • URL_ACTION.PUT:オブジェクトをアップロードする場合
expiry String 任意パラメータです。URLの有効時間(秒単位)。
  • デフォルト値:3600秒
  • 最小値:30秒
  • 最大値:7日
activeFrom String 任意パラメータです。このパラメータには、URLが有効になるまでの時間を指定します。最大値は7日です。デフォルトでは、URLは生成されるとすぐにアクティブになります。

サンプルコードスニペット


Package Imports
copy
import com.zc.component.stratus.enums.URL_ACTION;
import org.json.simple.JSONObject;
copy
JSONObject res = bucket.generatePreSignedUrl("sam/out/sample.txt", URL_ACTION.PUT);
System.out.println(res.get("signature"));

有効期限およびアクティブ時間付きPresigned URLの生成

サンプルコードスニペット


Package Imports
copy
import com.zc.component.stratus.enums.URL_ACTION;
import org.json.simple.JSONObject;
copy
JSONObject res = bucket.generatePreSignedUrl("object_name",URL_ACTION.GET, "expiry_in","active_from");
System.out.println(res.get("signature"));

アップロード用Presigned URLの生成のレスポンス例

copy
{
  "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を使用したオブジェクトアップロードの使用例スニペット

Package Imports
copy
import okhttp3.*;
import java.io.File;
import java.io.IOException;
copy
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