首页 > 解决方案 > 尝试在 NodeJS 中使用 aws-sdk 在 S3 中创建文件夹时访问被拒绝

问题描述

我正在尝试使用节点中的 AWS-SDK 在 s3 存储桶中创建文件夹。我对相应的存储桶具有完全访问权限但是,当我运行代码以创建文件夹时,我总是收到“拒绝访问。

 function init() {
  if (s3Instance === null) {
    AWS.config.update({
      accessKeyId: S3_ACCESS_KEY_ID,
      secretAccessKey: S3_SECRET_ACCESS_KEY,
      region: S3_REGION
    });

    if (HTTP_PROXY) {
      AWS.config.update({
        httpOptions: { agent: proxy(HTTP_PROXY) }
      });
    }

    // s3Instance = new AWS.S3();
    s3Instance = new AWS.S3({ apiVersion: "2006-03-01" });
  }
}

function createFolder(folderKey) {
  return new Promise((resolve, reject) => {
    var params = {
      Bucket: S3_BUCKET,
      Key: `${folderKey}/`,
      Body: "body does not matter"
    };
    s3Instance.upload(params, function (err, data) {
      if (err) {
        console.log(err, err.stack);
        reject(err);

      } else {
        console.log("Successfully created a folder on S3");
        resolve("Successfully created a folder on S3");
      }
    });
  });
}

bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\state_machine.js:26:10 在请求。(c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\request.js:38:9) 在请求。(c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\request.js:690:12) 在 Request.callListeners (c:\Users\sunny.bogawat\ Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\sequential_executor.js:116:18) 在 Request.emit (c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\ node_modules\aws-sdk\lib\sequential_executor.js:78:10) 在 Request.emit (c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\request. js:688:14) 在 Request.transition (c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\request.js:22:10) 在 AcceptorStateMachine。runTo (c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\state_machine.js:14:12) 在 c:\Users\sunny.bogawat\Workspace\oms -myportal\gateway\app\node_modules\aws-sdk\lib\state_machine.js:26:10 在请求。(c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\request.js:38:9) 在请求。(c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\request.js:690:12) 在 Request.callListeners (c:\Users\sunny.bogawat\ Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\sequential_executor.js:116:18) 在 callNextListener (c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\ aws-sdk\lib\sequential_executor.js:96:12) 在 IncomingMessage.onEnd (c:\Users\sunny.bogawat\Workspace\oms-myportal\gateway\app\node_modules\aws-sdk\lib\event_listeners.js: 313:

标签: node.jsamazon-web-servicesamazon-s3aws-sdk-nodejs

解决方案


我认为您应该使用 putObject 并尝试像这样创建您的 s3 对象。

s3 = new S3({
    credentials: {
        region: process.env.AWS_REGION,
        accessKeyId: process.env.AWS_ACCESS_KEY_ID,
        secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    }
});

    const uploadObject = async (bucket, key, body) => {
    try {

        const params = {
            Bucket: bucket,
            Key: key,
            Body: body//,
            //ContentType: "application/pdf"
        }

        var data = await s3.putObject(params).promise();

        return { message: data.error || 'Successfull' };



    } catch (err) {
        console.log(err)
        return { message: err.toString() || 'Failed' };
    }

};

推荐阅读