JavaScript om een ​​bestand van Amazon S3 Bucket te downloaden?

Ik probeerde een bestand van een emmer op Amazon S3 te downloaden. Ik vroeg me af of ik een JavaScript kan schrijven om zo’n bestand van een emmer te downloaden. Ik was het googlen, maar kon geen middelen vinden die me kunnen helpen doen.

Enkele stappen in het gedachten zijn: Authenticeer Amazon S3, vervolgens door bucket-naam en bestand (sleutel) te bieden, het bestand te downloaden of te lezen, zodat ik de gegevens in het bestand kan weergeven.

Bedankt,


Antwoord 1, Autoriteit 100%

Misschien kun je aws node.js api gebruiken:

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
    }
  }
);

Antwoord 2, Autoriteit 75%

Ik kwam hier op zoek naar weg om een ​​S3-bestand op de clientzijde te downloaden. Hier is hoe ik het heb opgelost:

Zoals, ik kan mijn S3-auth-sleutels op de clientzijde niet opslaan, ik heb mijn server-side-scripts gebruikt om een ​​vooraf ondertekende URL te genereren en het terug te sturen naar de klant zoals:

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

Gebruik deze URL in de front-end om te downloaden:

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);
        }
    })
});

Antwoord 3, Autoriteit 4%

Andere antwoorden hier werken, maar wilden uitbreiden wat voor mij werkte.

In mijn geval had ik te maken met bestanden te groot voor

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

om te werken. (Wordt gekregen url is too long)
Mijn oplossing was om een ​​verborgen ankerlabel op te nemen en de klik op die tag op Ajax-succes op te nemen.
U kunt de ankerlabel niet met de vleermuis gebruiken, tenzij u niet geeft om het hanteren van fouten.

S3 reageert met een XML-foutbestand als er iets misgaat, zodat de browser automatisch die XML-reactie weergeeft. Door eerst probeert de URL met Ajax te raken, kunt u die fout vangen zonder de lelijke XML te tonen. Bij succes in dat AJAX-oproep is wanneer u weet dat u duidelijk bent om het bestand te downloaden en te downloaden.

Other episodes