缺少签名,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
答案 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);
});
});