Amazon S3 SignatureDoesNotMatch error with NodeJS



我正在尝试使用nodejs和express后端将文件上传到Amazon S3。问题是,当我试图上传文件时,我得到以下错误:

SignatureDoesNotMatch: The request signature we calculated does not match the signature you provided. Check your key and signing method.

IAM User的策略具有上传文件到桶的权限,且该用户的密钥正常

这里是s3的配置和我用来上传文件的函数:

import AWS from 'aws-sdk';
const s3 = new AWS.S3({
region: process.env.AWS_BUCKET_REGION,
accessKeyId: process.env.AWS_ACCESS_KEY,
secretAccessKey: process.env.AWS_SECRET_KEY
}) 
export const uploadFileS3 = (file) => {
const uploadParams = {
Bucket: process.env.AWS_BUCKET_NAME,
Body: file.data,
Key: file.name
};
return s3.upload(uploadParams).promise()
}

这里是我用来上传文件的express控制器

routerProgress.post("/upload-progress", verifyJWT, async (req, res) => {
const { file1 } = req.files;
const res = await uploadFileS3(file1);
console.log(res);
}
如果有人知道出了什么问题,我将非常感谢他。我浪费了很多时间。

这个错误可能有以下几个原因。

检查以下并应用,错误仍然消失

  1. 使用签名版本
const s3 = new AWS.S3({
region: process.env.AWS_BUCKET_REGION,
accessKeyId: process.env.AWS_ACCESS_KEY,
secretAccessKey: process.env.AWS_SECRET_KEY,
signatureVersion: 'v4'
}) 
  1. 检查AWS_SECRET_KEY的前后是否有空格

  2. 如果键包含特殊字符,则使用反斜杠。

  3. 如果文件名包含UTF8字符,则进行编码。

最新更新