我正在尝试使用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);
}
如果有人知道出了什么问题,我将非常感谢他。我浪费了很多时间。
这个错误可能有以下几个原因。
检查以下并应用,错误仍然消失
- 使用签名版本
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'
})
检查AWS_SECRET_KEY的前后是否有空格
如果键包含特殊字符,则使用反斜杠。
如果文件名包含UTF8字符,则进行编码。