从亚马逊s3桶下载文件的Javascript?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从亚马逊s3桶下载文件的Javascript?相关的知识,希望对你有一定的参考价值。

我试图从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调用就是当你知道你很清楚尝试下载文件时。

以上是关于从亚马逊s3桶下载文件的Javascript?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不下载文件的情况下搜索amazon S3存储桶中的文件内容

将数据从 gs 存储桶移动到 s3 亚马逊存储桶的 GCP dataproc 集群 hadoop 作业失败 [控制台]

WinHttp 不会从 WinXP 上的 Amazon S3 下载

如何使用 axios 将文件上传到亚马逊 s3 存储桶?

Boto3 从 S3 存储桶下载所有文件

如何配置亚马逊云端以阻止某些 S3 存储桶文件访问?