Javascript для загрузки файла из amazon s3 bucket?

Я пытался загрузить файл из ведра на Amazon S3. Мне было интересно, могу ли я написать javascript для загрузки такого файла из ведра. Я искал его, но не мог найти никаких ресурсов, которые могли бы помочь мне в этом.

Некоторые из этих шагов: аутентификация Amazon S3, а затем предоставление имени ведра и файла (ключа), загрузка или чтение файла, чтобы я мог отображать данные в файле.

Спасибо,

Ответ 1

Может быть, вы можете использовать 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
    }
  }
);

Ответ 2

Я пришел сюда в поисках, чтобы скачать файл 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);
        }
    })
});

Ответ 3

Здесь работают другие ответы, но хотелось бы подробнее рассказать о том, что у меня работает.

В моем случае я имел дело с файлами, слишком большими для

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

работать. (Получал url is too long) Мое решение состояло в том, чтобы включить скрытый тег привязки и вызвать щелчок по этому тегу в случае успеха ajax. Вы не можете сразу использовать тег привязки, если не заботитесь об ошибках.

S3 ответит файлом ошибок XML, если что-то пойдет не так, поэтому браузер автоматически отобразит этот ответ XML. Сначала попытавшись поразить URL-адрес с помощью ajax, вы можете обнаружить эту ошибку, не показывая уродливый XML. Успех в этом вызове ajax - это когда вы знаете, что вы можете попробовать скачать файл.