www.dextsolution.com
DEXTUPLOAD
X5
menu toggle製品の説明 > NCP Object Storageファイルのダウンロード

NCP Object Storageファイルのダウンロード

DEXTUploadX5はNCP Object Storageバケットに存在するファイルをダウンロードする機能を提供します。

DEXTUploadX5を使ってNCP Object Storageバケットからファイルをダウンロードするには、異なるソース間で通信をするためにCORSを設定する必要があります。HEAD、GETリクエストメソッドと「Accept-Ranges」レスポンスヘッダを必ず許可する必要があり、動作時にはAllowedOriginsプロパティを'*'値で設定しないように注意してください。

# NCP Object Storage CORS configuration
[
    {
        "AllowedHeaders": ["*"],
        "AllowedMethods": ["HEAD", "GET", "PUT", "POST", "DELETE"],
        "AllowedOrigins": ["*"]
        "ExposeHeaders": ["ETag", "Accept-Ranges"]
    }
]
NCP Object Storageに保存されたファイルが'Public-Read'権限を持つ場合

'Public-Read'権限を持つファイルをダウンロードする時、認証情報が必要ないので、DEXTUploadX5の単一ファイルダウンロードまたは複数ファイルダウンロード機能を使ってファイルをダウンロードすることができます。仮想ファイルを登録する際、url属性にNCP Object StorageバケットにあるファイルオブジェクトのURLを設定します。

NCP Object Storageバケットに保管されたオブジェクト(ファイル)は、次のようなアドレス体系でアクセスすることができます。

https://{リージョン}.object.ncloudstorage.com/{バケット名}/{key}
または
https://{バケット名}.{リージョン}.object.ncloudstorage.com/{key}
dx.addVirtualFile({ name: "bridge_509147.jpg", size: 509147, url: "https://kr.object.ncloudstorage.com/abc-bucket/bridge_509147.jpg" });
dx.addVirtualFile({ name: "beach_239826.jpg", size: 239826, url: "https://kr.object.ncloudstorage.com/abc-bucket/beach_239826.jpg" });
dx.addVirtualFile({ name: "cosmos (empty) 195779.jpg", size: 195779, url: "https://kr.object.ncloudstorage.com/abc-bucket/cosmos+%28empty%29+195779.jpg" });
DEXTUploadX5とブラウザAWS SDKを使ってダウンロードする方法

AWS SDKを使ってブラウザで直接バケットに存在するファイルをダウンロードする方法として、'リージョン、バケット、アクセスキー、秘密アクセスキー'情報が必要です。そして、対象がNCP Object Storageバケットに存在することを知る必要があるので、setDownloadModeメソッドを使ってダウンロードモードを設定する必要があります。

// NCPOS方式で設定します。
dx.setDownloadMode("NCPOS");
dx.setNCPOSDownloadConfig({
    type: "NON-SECRET",
    accessKeyId: "ABCD...1234",
    secretAccessKey: "ABCD...1234",
	// kr, us, sg, jp, de
    region: "kr",
    bucket: "abc-bucket"
});

ダウンロードするオブジェクトのアドレスを仮想ファイルのURLに設定すると、アドレスからキー値を分離してダウンロード作業を行います。

dx.addVirtualFile({ name: "bridge_509147.jpg", size: 509147, url: "https://kr.object.ncloudstorage.com/abc-bucket/bridge_509147.jpg" });
dx.addVirtualFile({ name: "beach_239826.jpg", size: 239826, url: "https://kr.object.ncloudstorage.com/abc-bucket/beach_239826.jpg" });
dx.addVirtualFile({ name: "cosmos (empty) 195779.jpg", size: 195779, url: "https://kr.object.ncloudstorage.com/abc-bucket/cosmos+%28empty%29+195779.jpg" });

AWS SDKを使用してファイルをダウンロードする場合、url属性に必ずしもオブジェクトのアドレスを指定する必要はありません。DEXTUploadX5はurl属性が空であれば、ダウンロードを行わないので、最小限の情報だけをurl属性に設定すればよいです。ただし、この方法では、urlからキー値を抽出することができないため、makeKeyプロパティにキーを生成する関数を設定する必要があります。

dx.setNCPOSDownloadConfig({
    ...
    // キー: コンポーネント名 / ファイル名 
    makeKey: item => `${item.controlId}/${item.name}`
});

その後の作業は単一ファイルのダウンロードや複数ファイルのダウンロードと同じようにボタンバインディングを使うか、直接downloadメソッドを呼び出してダウンロードをすることができます。

Presigned URLを使用してダウンロードする

'アクセスキー、秘密のアクセスキー'のような情報は外部に公開されてはいけない情報なので、公開された場所で使うのは危険です。AWSの認証情報を公開せずにダウンロードするためには、バックエンドで事前に署名されたアドレスを生成し、そのアドレスを使ってファイルをダウンロードする方法があります。

dx.setDownloadMode("NCPOS");
dx.setNCPOSDownloadConfig({
    //type: "SECRET",
    signedURL: "https://domain/path/ncpos-download-geturl"
});

signedURL属性で指定されたバックエンドのアドレスは、ファイルをダウンロードする時必要な署名されたアドレスを生成して返す役割を担います。バックエンドで署名されたアドレスを返すためには、AWSが提供するSDKを使う必要があります。プラットフォームに適したAWS SDKを利用してサーバー側であらかじめ署名されたアドレスを生成すると、資格証明書のような情報を公開せず、ファイルのダウンロード過程だけをDEXTUploadX5が処理するようにすることができます。

Java Web Application、T環境で使用可能な例が提供されるので、提供された例を参考にして実装するようにします。

  • JavaそしてMavenを使う環境の場合、AWS SDKを取得する方法

    <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>NCP Object Storage</artifactId>
        <version>2.x.x</version>
    </dependency>
  • JavaそしてGradleを使ってる環境の場合AWS SDKを取得する方法

    implementation 'software.amazon.awssdk:NCP Object Storage:2.x.x'
特徴
  • 引き継ぎ機能をサポートします。
  • ブラウザAWS SDKを使用する場合、ファイルのダウンロードを開始する際に、SDKをダウンロードする時間が追加で存在することがあります。
  • NCP Object Storageからダウンロードする場合、プログレスウィンドウに表示される進行状況が他のダウンロード方式に比べて不自然な場合があります。