我有一个用例将AWS S3存储桶设为默认私有,但是,
在上传到AWS S3时将某些对象设为公开。
我正在使用以下代码使用public-read
-
module.exports.generateS3PostSignedUrl = async (bucketName, bucketKey, objectExpiry) => {
let s3Client = new AWS.S3({
region: 'some-region'
});
let signingParams = {
Expires: objectExpiry,
Bucket: bucketName,
Fields: {
key: bucketKey,
},
Conditions: [
['acl', 'public-read']
],
ACL: 'public-read'
}
let s3createPresignedPost = util.promisify(s3Client.createPresignedPost).bind(s3Client);
let signedUrl = await s3createPresignedPost(signingParams);
return signedUrl;
};
上传时请求-
如果我删除了签名参数中的conditions数组,则能够将文件上传到AWS S3,
但是当我单击它的URL时文件仍然不公开。
我相信我在signingParams
部分做错了代码。
参考-
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createPresignedPost-property
答案 0 :(得分:1)
这里的参数顺序很重要。将acl参数放在文件之前,它应该可以工作;否则S3只会忽略您提供的值。
下面是在屏幕表格数据中具有不同参数放置位置的示例屏幕截图。
此外,请确保由具有s3:PutObjectAcl
和s3:PutObject
权限的用户执行createPresignedPost。
The correct order of form-data parameters
The same request but with acl
parameter being placed after file
(Ignored by S3)