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

Amazon S3ファイルのダウンロード

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

S3に保存されたファイルが'Public-Read'権限を持つ場合

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

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

https://{バケット名}.s3.{リージョン}.amazonaws.com/{key}
dx.addVirtualFile({ name: "bridge_509147.jpg", size: 509147, url: "https://abc-bucket.s3.ap-northeast-2.amazonaws.com/bridge_509147.jpg" });
dx.addVirtualFile({ name: "beach_239826.jpg", size: 239826, url: "https://abc-bucket.s3.ap-northeast-2.amazonaws.com/beach_239826.jpg" });
dx.addVirtualFile({ name: "cosmos (empty) 195779.jpg", size: 195779, url: "https://abc-bucket.s3.ap-northeast-2.amazonaws.com/cosmos+%28empty%29+195779.jpg" });

S3バケットでもダウンロードのための設定をする必要があります。異なるソース間で通信をするためにはCORS設定が必要で、HEAD、GETリクエストメソッドと「Accept-Ranges」応答ヘッダを必ず許可する必要があります。運用時にはAllowedOrigins属性を'*'値で設定しないように注意しなければなりません。

# S3 CORS configuration
[
    {
        "AllowedHeaders": ["*"],
        "AllowedMethods": ["HEAD", "GET", "PUT", "POST", "DELETE"],
        "AllowedOrigins": ["*"]
        "ExposeHeaders": ["ETag", "Accept-Ranges"]
    }
]
DEXTUploadX5とブラウザAWS SDKを使ってダウンロードする方法

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

// AWSS3方式で設定します。
dx.setDownloadMode("AWSS3");
dx.setAWSS3DownloadConfig({
    type: "NON-SECRET",
    accessKeyId: "ABCD...1234",
    secretAccessKey: "ABCD...1234",
    region: "ap-northeast-2",
    bucket: "abc-bucket"
});

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

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

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

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

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

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

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

dx.setDownloadMode("AWSS3");
dx.setAWSS3DownloadConfig({
    //type: "SECRET",
    signedURL: "https://domain/path/awss3-download-geturl"
});

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

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

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

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

    implementation 'software.amazon.awssdk:s3:2.x.x'
  • ASP.NET環境の場合、AWS SDKを取得する方法

    インストールすると、AWSSDK.Core.dllとAWSSDK.S3.dllを取得することができます。

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