Javascript 你能在没有AWS登录凭证的情况下从AmazonS3 bucket下载文件吗
我有一个问题陈述,我希望使用Express和NodeJS框架下载该文件Javascript 你能在没有AWS登录凭证的情况下从AmazonS3 bucket下载文件吗,javascript,node.js,amazon-web-services,amazon-s3,Javascript,Node.js,Amazon Web Services,Amazon S3,我有一个问题陈述,我希望使用Express和NodeJS框架下载该文件 我可以从amazon/s3 bucket下载文件而不必在AWS中使用登录帐户吗?有三种常见的方法可以访问s3对象/文件,而无需AWS凭据: 向存储桶、存储桶中的文件夹或文件夹授予公共访问权限。这可能是最容易设置和使用的,但是您的对象是公共的 使用url。这些是后端为前端使用而必须生成的临时URL。URL可用于下载或上载文件。任何拥有这些URL的人都可以下载/上传文件到您的bucket,但由于URL是临时的,所以URL是有限
我可以从amazon/s3 bucket下载文件而不必在AWS中使用登录帐户吗?有三种常见的方法可以访问s3对象/文件,而无需AWS凭据:
我设法解决了这个问题
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);
});
});
当然可以,如果文件是公开的,或者您有S3预签名的url。好的,Marcin先生。谢谢你的时间和帮助。我试试看。关于上传@Marcin怎么样?你也可以创建s3 pr签名文件进行上传。如果这能解决你的问题,我可以通过一些链接在答案中提供更多信息?@Marcin。好的。我会非常感激的。非常感谢你,我一定会努力的。regards@SuchetaShrivastava没问题。很高兴能帮上忙。看起来OP正在AWS服务器上运行代码,他们应该以这种方式使用IAM角色,并且不需要登录帐户!这是一个非常糟糕的方式。。。您不应该在代码中硬编码凭据。如果此代码在AWS实例上运行-您应该使用IAM角色,并且不需要任何凭据。嗨,felix,我没有正式或正式的AWS凭据。使用预先签名的URL。当做