2

私が使用している関連パッケージは、、、aws-sdkおよびmulter-s3ですmulter

アップロードのセットアップは次のとおりです。

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 { /*...*/ }

passed1との両方がpassed2コンソールに出力され、アクセス キーとキー ID が正しいことを確認できました。画像をアップロードしようとすると、403 エラーがスローされます。

私は反応ネイティブを使用しています、そして私はやっていました

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

「アップロード」をクリックした後、プログラムは何も起こらなかったかのように進み続けました。

次に、nodejs インポートを次のように変更しました。

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

そして今、私は 403 をスローされています。何が間違っているのかわかりません。


編集:

私の S3 のアクセス許可:

画像

4

1 に答える 1

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 にアップロードできるはずです。ただし、私はあなたが使用する方法ではなく、投稿したばかりの方法を使用します。

于 2019-08-28T14:40:59.443 に答える