簡體   English   中英

Javascript從亞馬遜s3存儲桶下載文件?

[英]Javascript to download a file from amazon s3 bucket?

我試圖從 Amazon S3 上的存儲桶下載文件。 我想知道我是否可以編寫一個 javascript 來從存儲桶中下載這樣的文件。 我在谷歌上搜索它,但找不到任何可以幫助我做到這一點的資源。

需要記住的一些步驟是:對 Amazon S3 進行身份驗證,然后通過提供存儲桶名稱和文件(密鑰),下載或讀取文件,以便我能夠顯示文件中的數據。

謝謝,

也許您可以使用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
    }
  }
);

我來這里是為了在客戶端下載一個 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);
        }
    })
});

這里的其他答案有效,但想擴展對我有用的內容。

就我而言,我處理的文件太大了

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

上班。 (獲取url is too long )我的解決方案是包含一個隱藏的錨標記,並在 ajax 成功時觸發對該標記的點擊。 除非您不關心處理錯誤,否則您不能立即使用錨標記。

如果出現問題,S3 將使用 XML 錯誤文件進行響應,因此瀏覽器將自動顯示該 XML 響應。 通過首先嘗試使用 ajax 訪問 URL,您可以在不顯示丑陋 XML 的情況下捕獲該錯誤。 在該 ajax 調用中成功是當您知道您可以嘗試下載文件時。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM