Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 你能在没有AWS登录凭证的情况下从AmazonS3 bucket下载文件吗_Javascript_Node.js_Amazon Web Services_Amazon S3 - Fatal编程技术网

Javascript 你能在没有AWS登录凭证的情况下从AmazonS3 bucket下载文件吗

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是有限

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


我可以从amazon/s3 bucket下载文件而不必在AWS中使用登录帐户吗?

有三种常见的方法可以访问s3对象/文件,而无需AWS凭据:

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

  • 使用url。这些是后端为前端使用而必须生成的临时URL。URL可用于下载或上载文件。任何拥有这些URL的人都可以下载/上传文件到您的bucket,但由于URL是临时的,所以URL是有限的

  • 把你的桶放在前面。这使得您的存储桶完全私有,您的所有文件都将通过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);
      });
    });
    

    当然可以,如果文件是公开的,或者您有S3预签名的url。好的,Marcin先生。谢谢你的时间和帮助。我试试看。关于上传@Marcin怎么样?你也可以创建s3 pr签名文件进行上传。如果这能解决你的问题,我可以通过一些链接在答案中提供更多信息?@Marcin。好的。我会非常感激的。非常感谢你,我一定会努力的。regards@SuchetaShrivastava没问题。很高兴能帮上忙。看起来OP正在AWS服务器上运行代码,他们应该以这种方式使用IAM角色,并且不需要登录帐户!这是一个非常糟糕的方式。。。您不应该在代码中硬编码凭据。如果此代码在AWS实例上运行-您应该使用IAM角色,并且不需要任何凭据。嗨,felix,我没有正式或正式的AWS凭据。使用预先签名的URL。当做