![](/img/trans.png)
[英]How to download an asset (zip file) stored on Amazon S3 without having direct access to the bucket
[英]Can you download a file from Amazon S3 bucket without having AWS login credentials
我有一个问题陈述,我希望使用 Express 和 NodeJS 框架下载文件。
我可以在没有 AWS 登录帐户的情况下从 amazon/s3 存储桶下载文件吗?
无需 AWS 凭证即可通过三种常用方式访问 S3 对象/文件:
授予对存储桶、存储桶中的文件夹或单个对象的公共访问权限。 这可能是最容易设置和使用的,但是您的对象是公开的。
使用S3 预签名 url url。 这些是您的后端必须生成供前端使用的临时URL。 url 可以用于下载或上传文件。 拥有这些 url 的任何人都可以将文件下载/上传到您的存储桶,但由于 url 是临时的,因此对 url 的热链接是有限的。
使用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.