缺少签名,aws-sdk-js的createPresignedPost中的上传器

时间:2019-12-15 18:01:07

标签: node.js reactjs aws-sdk

缺少签名,aws-sdk中createPresignedPost的上传者,带有以下代码。未获得相关结果,无法按照react-dropzone-uploader将文件上传到s3。从aws s3上传文件时遇到403错误

 const params = {
      Bucket: myBucket,
      Key: myKey,
      Fields: {
        Key: myKey,
        AWSAccessKeyId: process.env.AWS_ACCESS_KEY_ID,
        acl: "public-read",
      },
      Expires: signedUrlExpireSeconds,
      Conditions: [
          ['content-length-range', 0, 100000000], // 100 Mb
          {'acl': 'public-read'}
      ]
  };
    s3.createPresignedPost(params, function(err, data) {
      if (err) {
        console.error('Presigning post data encountered an error', err);
      } else {
        // console.log('The post data is', data);

         data.fileUrl = data.url+"/"+data.fields.key;
         data.uploadUrl = data.url+"/";
          res.status(200).send(
            new apiResponse.responseObject(200, data, null).getResObject()
          );
      }
    });

https://react-dropzone-uploader.js.org/docs/s3#s3-using-put-instead-of-post

1 个答案:

答案 0 :(得分:0)

生成预签名URL时,无需在参数内传递AWSAccessKeyId。同样,“ acl”也应位于Fields属性之外。

return new Promise((resolve, reject) => {
    const params = {
        Bucket: myBucket,
        Fields: {
            key: myKey
        },
        Expires: signedUrlExpireSeconds,
        Conditions: [
            ['content-length-range', 0, 10000000], // 10 Mb
            {'acl': 'public-read'}
        ]
    };
    s3.createPresignedPost(params, (err, data) => {
        resolve(data);
    });
});