javascript - 无法使用 Node 下载 S3 对象

标签 javascript node.js amazon-web-services amazon-s3

我正在尝试在使用 Node 时下载 S3 对象,并询问了这个 previous question 。代码如下。我将我的访问 key 凭据声明为环境变量,并尝试了我的帐户访问 key 以及 IAm Angular 色。我尝试生成多个 key 、配置文件、存储桶和文件,以及创建存储桶策略,所有这些都导致了下面的堆栈跟踪。我是否正确调用存储桶和文件对象以及正确设置我的凭据?在使用 aws-sdk 下载对象之前,我需要确保首先设置一些其他策略或配置集吗?谢谢!

代码:

var AWS = require('aws-sdk');
var s3 = new AWS.S3();

AWS.config = new AWS.Config();
AWS.config.accessKeyId = "myAccessKey";
AWS.config.secretAccessKey = "mySecretAccessKey";
AWS.config.region = "us-east-1";

var params = { Bucket: "myBucket", Key: "fileName" }

s3.getObject(params, function(err, data) {
  if (err) console.log(err, err.stack);
  else     console.log(data);
});

堆栈跟踪:

jemery62:aws/ (aws_edits✗) $ node main.js                                                                       [21:26:21]
{ AccessDenied: Access Denied
    at Request.extractError (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/services/s3.js:577:35)
    at Request.callListeners (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
    at Request.emit (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
    at Request.emit (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/request.js:683:14)
    at Request.transition (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/request.js:22:10)
    at AcceptorStateMachine.runTo (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/state_machine.js:14:12)
    at /Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/state_machine.js:26:10
    at Request.<anonymous> (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/request.js:38:9)
    at Request.<anonymous> (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/request.js:685:12)
    at Request.callListeners (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
  message: 'Access Denied',
  code: 'AccessDenied',
  region: null,
  time: 2017-10-27T02:26:23.394Z,
  requestId: 'DDD8D2211A6F4551',
  extendedRequestId: 'adUqsuXLIs0EIuy62/9YwcDWiil+ms9fX7+q4GIOxXWos5/5Jgvs3JQsg4N3BchWPnjIjj6Yqjg=',
  cfId: undefined,
  statusCode: 403,
  retryable: false,
  retryDelay: 23.592474526046313 } 'AccessDenied: Access Denied\n    at Request.extractError (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/services/s3.js:577:35)\n    at Request.callListeners (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/sequential_executor.js:105:20)\n    at Request.emit (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/sequential_executor.js:77:10)\n    at Request.emit (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/request.js:683:14)\n    at Request.transition (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/request.js:22:10)\n    at AcceptorStateMachine.runTo (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/state_machine.js:14:12)\n    at /Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/state_machine.js:26:10\n    at Request.<anonymous> (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/request.js:38:9)\n    at Request.<anonymous> (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/request.js:685:12)\n    at Request.callListeners (/Users/jemery62/dev/jimmyemery_com/node_modules/aws-sdk/lib/sequential_executor.js:115:18)'

最佳答案

此问题是您在创建 S3 客户端后设置“config”。将您的代码更改为如下所示:

var AWS = require('aws-sdk');

AWS.config = new AWS.Config();
AWS.config.accessKeyId = "myAccessKey";
AWS.config.secretAccessKey = "mySecretAccessKey";
AWS.config.region = "us-east-1";

var s3 = new AWS.S3();

var params = { Bucket: "myBucket", Key: "fileName" }

s3.getObject(params, function(err, data) {
  if (err) console.log(err, err.stack);
  else     console.log(data);
});

关于javascript - 无法使用 Node 下载 S3 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46966678/

相关文章:

javascript - 发布网站后,使用 AngularJS 发布表单返回 405 代码

javascript - 如何将变量从回调函数传递到函数调用?

java - 当 DynamoDB 中尚不存在属性时,如何插入 map 作为属性值?

javascript - Sockets.io构建错误, fatal error c1083,请指教

javascript - 单击背景或按钮时如何关闭图层弹出窗口?

node.js - 如何使断开连接事件仅在用户从帐户注销时触发(node.js + Express socket.io)

node.js - 如何在 PM2 中运行 2 个独立的应用程序?

amazon-web-services - 如何更新 Karpenter 创建的 EKS 节点版本?

amazon-web-services - 我能否判断 Amazon SQS 消息是否仍在传输中?

javascript - 使用jquery循环div元素