【问题标题】:Running into a 403 error with nodejs and aws使用 nodejs 和 aws 遇到 403 错误
【发布时间】:2020-01-01 18:02:43
【问题描述】:

我使用的相关包是aws-sdkmulter-s3multer

我有这样的上传设置:

aws.config.update({
    secretAccessKey: "accessKey",
    accessKeyId: "keyId",
    region: "eu-west-2"
});

var s3 = new aws.S3();

const upload = multer({
    storage: multerS3({
        s3,
        acl: "public-read",
        bucket: "my-buckets-name",
        metadata: function(req, file, cb) {
            console.log("passed1"); // prints
            cb(null, {
                fieldName: "file.fieldname"
            });
        },
        key: function(req, file, cb) {
            console.log("passed2"); // prints
            cb(null, Date.now().toString());
        }
    })
});

我的路线是这样的,

router.post(
        "/single",
        [auth, upload.single("image")],
        async (req, res) => {
                console.log("hereiam"); // never reached
                res.json({
                    msg: "Server received media. Processing..."
                });

                if (mediaType === "image") {
                    try { /*...*/ } catch { /*...*/ }
                } else { /*...*/ }

passed1passed2 都输出到控制台,我确信我的访问密钥和密钥 ID 是正确的。当我尝试上传图片时,出现 403 错误。

我正在使用本机反应,我正在做

const aws = require("aws-sdk/dist/aws-sdk-react-native");

这完全没有给我任何反馈,在我点击“上传”后,程序就像什么都没发生一样继续运行。

然后我把nodejs导入改成,

const aws = require("aws-sdk");

现在我被抛出 403。不知道我做错了什么。


编辑:

我的 S3 的权限:

【问题讨论】:

  • 您确定您的密钥具有正确的权限吗?您能列出您为密钥添加的权限吗?
  • 当然,我更新了 OP
  • 这些是 S3 存储桶的权限。我想要访问密钥所在的 IAM 用户的权限。您可以在 AWS 控制台的 IAM 部分找到它
  • 我没有 IAM 用户。相反,我遇到了this 提示,我只是选择了Continue to security credentials,因为这是一个个人项目,我还不想打扰安全性和最佳实践。我是否应该创建一个 IAM 用户,这可能会解决此 403 问题/如果我确实创建了一个 IAM 用户,它是否会为您提供更好的方法让我了解如何解决此 403 问题?
  • This is all I see 在这一点上,就 AWS 控制台而言

标签: node.js react-native amazon-s3 aws-sdk-js multer-s3


【解决方案1】:

你可以试试这个解决方案吗?

const AWS = require('aws-sdk');
const s3Client = new AWS.S3();
let params = {
   Bucket: <the bucket>,
   Key: <the key>,
   Body: <The file>
};
s3Client.upload(params, function(err, data) {
   if (err) console.log(err);
   else 
       <do something>       
 });

这就是我通常使用 API 的方式。请注意,AWS 凭证是通过环境变量传递的,但您仍然可以按原样传递它们。从逻辑上讲,管理员访问权限应该允许您将文件上传到 S3,前提是您正确添加了凭据。但是,我使用的是我刚刚发布的方法,而不是您使用的方法。

【讨论】:

  • 感谢您提供的内容——在 `if (s3Err) console.log('err', err);` 行,它会不断打印带有 id 和日期字段的对象,用于例如err { _id: 5d66ab5df3232c73e02b803e, date: 2019-08-28T16:27:09.998Z }
  • 应该是err不是s3Err,我搞错了
  • 我在代码中替换了它,我从你的答案中复制了它。我目前将其命名为if(err) console.log('err', err);
  • 是的,我猜这是错误的 id,但我试图找出错误记录在哪里
  • 您能打印并显示您收到的错误吗?这根本没有任何意义。另外,您上传的文件的类型和大小是什么?
猜你喜欢
  • 2022-06-15
  • 2016-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 2019-01-29
  • 2013-03-16
  • 1970-01-01
  • 2015-02-03
相关资源
最近更新 更多