使用nodejs和aws遇到403错误

时间:2019-08-28 13:27:58

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

我正在使用的相关软件包是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权限:

img

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此解决方案吗?

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。但是,我使用的是我刚刚发布的方法,而不是您使用的方法。