web-dev-qa-db-ja.com

Amazon s3バケットからファイルをダウンロードするJavascript?

Amazon S3のバケットからファイルをダウンロードしようとしていました。バケツからそのようなファイルをダウンロードするためにjavascriptを書くことができるかどうか疑問に思っていました。私はそれをグーグルで検索していましたが、それを行うのに役立つリソースが見つかりませんでした。

念頭に置いていくつかの手順は次のとおりです。AmazonS3を認証してから、バケット名とファイル(キー)を指定して、ファイルをダウンロードまたは読み取り、ファイル内のデータを表示できるようにします。

おかげで、

19
c0mrade

たぶん AWS Node.js API を使用できます:

var AWS = require('aws-sdk');
AWS.config.update(
  {
    accessKeyId: ".. your key ..",
    secretAccessKey: ".. your secret key ..",
  }
);
var s3 = new AWS.S3();
s3.getObject(
  { Bucket: "my-bucket", Key: "my-picture.jpg" },
  function (error, data) {
    if (error != null) {
      alert("Failed to retrieve an object: " + error);
    } else {
      alert("Loaded " + data.ContentLength + " bytes");
      // do something with data.Body
    }
  }
);
33
yegor256

クライアント側でs3ファイルをダウンロードするために離れて探しに来ました。ここに私がそれを解決した方法があります:

クライアント側にs3認証キーを保存できないため、サーバー側のスクリプトを使用して、事前に署名されたURLを生成し、次のようにクライアントに送り返します。

const AWS = require('aws-sdk')

const s3 = new AWS.S3()
AWS.config.update({accessKeyId: 'your access key', secretAccessKey: 'you secret key'})

const myBucket = 'bucket-name'
const myKey = 'path/to/your/key/file.extension'
const signedUrlExpireSeconds = 60 * 5 // your expiry time in seconds.

const url = s3.getSignedUrl('getObject', {
 Bucket: myBucket,
 Key: myKey,
 Expires: signedUrlExpireSeconds
})

// return the url to client

フロントエンドで次のURLを使用して、ダウンロードをトリガーします。

function download(url){
    $('<iframe>', { id:'idown', src:url }).hide().appendTo('body').click();
}
$("#downloadButton").click(function(){
    $.ajax({
        url: 'example.com/your_end_point',
        success: function(url){
            download(url);
        }
    })
});
16
Sahith Vibudhi

ここでの他の答えは動作しますが、私のために働いたものに拡張したかった。

私の場合、私は大きすぎるファイルを扱っていました

function download(url){
    $('<iframe>', { id:'idown', src:url }).hide().appendTo('body').click();
}

働く。 (url is too long)私の解決策は、非表示のアンカータグを含め、ajaxの成功時にそのタグへのクリックをトリガーすることでした。エラーの処理を気にしない限り、すぐにアンカータグを使用することはできません。

何か問題が発生した場合、S3はXMLエラーファイルで応答するため、ブラウザーはそのXML応答を自動的に表示します。最初にajaxでURLをヒットしようとすると、ByいXMLを表示せずにそのエラーをキャッチできます。そのajax呼び出しで成功するのは、ファイルをダウンロードしてみてください。

1
cssiamamess