繁体   English   中英

您可以在没有 AWS 登录凭证的情况下从 Amazon S3 存储桶下载文件吗

[英]Can you download a file from Amazon S3 bucket without having AWS login credentials

我有一个问题陈述,我希望使用 Express 和 NodeJS 框架下载文件。

我可以在没有 AWS 登录帐户的情况下从 amazon/s3 存储桶下载文件吗?

无需 AWS 凭证即可通过三种常用方式访问 S3 对象/文件:

  1. 授予对存储桶、存储桶中的文件夹或单个对象公共访问权限 这可能是最容易设置和使用的,但是您的对象是公开的。

  2. 使用S3 预签名 url url。 这些是您的后端必须生成供前端使用的临时URL。 url 可以用于下载或上传文件。 拥有这些 url 的任何人都可以将文件下载/上传到您的存储桶,但由于 url 是临时的,因此对 url 的热链接是有限的。

  3. 使用CloudFront将您的存储桶放在前面。 这可以让您的存储桶保持完全私有,并且您的所有文件都将通过 CloudFront边缘站点访问,这也可以加速您的网站。

我设法解决了这个问题。

var S3 = require('aws-sdk/clients/s3');
var fs = require('fs');
const stream = require('stream');
const request = require('request');
const AWS = require('aws-sdk')
const awsS3 = new AWS.S3()
 
var app = express();

app.use(cors());

var AWS_ACCESS_KEY_ID =  'AKIA....';
var AWS_SECRET_ACCESS_KEY =  'uQ/l....';
var S3_BUCKET_NAME = 'realindia';
var toUploadFileName = 'abcd.pdf'

app.get('/downloadURL', (req,res,next) => {
  const s3 = new S3({
    apiVersion: '2021-04-10',
    accessKeyId: AWS_ACCESS_KEY_ID,
    secretAccessKey: AWS_SECRET_ACCESS_KEY,
    signatureVersion: 'v4',
    region: 'us-east-2' // region of my bucket and what it says is expected
  });

  var s3params = {'Bucket': S3_BUCKET_NAME, 'Key': fileName }
  
  s3.getSignedUrl('getObject', s3params, function(err, url) {
    if (err) res.json(err);

//To download the File.

    var options = {
        Bucket : s3params.Bucket,
        Key    : s3params.Key
    };

    res.attachment(s3params.Key);
    var fileStream = s3.getObject(options).createReadStream();
    fileStream.pipe(res);
  });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM