我已经拥有了根AWS账户所拥有的S3存储桶。
名为uploads
的存储桶的子目录向全世界开放,即(在存储桶级别):
{
"Sid": "Allow anonymous uploads",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::my-bucket/uploads/*"
}
当我以匿名用户身份上传文件(不提供任何AWS凭据)时,我确实可以写入uploads
目录。但是,IAM用户和父(root)用户都无法对上载的文件应用任何修改,例如重命名或移动,无论使用何种接口,AWS控制台或API,都会出现问题。
使用POST
和参数
'acl': 'bucket-owner-full-control'
或'acl': 'public-read-write'
即使在上传参数中明确提到ACL策略,ACL策略是否可能对没有所有者的对象(匿名上传)没有影响?如果是这种情况,是否有办法在上传或追溯时更改文件的所有权?
为什么在上传文件时不考虑ACL政策?
为什么我无法重命名或移动上传的文件?
POST请求由名为FileTransfer
的cordova插件发出,默认情况下使用POST
但如果需要可以使用PUT
。以下是执行上传的代码:
var upload_options = {
headers: {
'Content-Length': 4900000,
'Connection': 'close',
'acl': 'bucket-owner-full-control'
},
params: {
'key': 'uploads/' + fileName,
'Content-Type': 'image/jpeg'
}
};
var s3 = new FileTransfer();
s3.upload(imageURI, encodeURI("https://<my-bucket>.s3-eu-west-1.amazonaws.com/"), upload_success, upload_fail, upload_options);