如何在上传到Amazon S3时设置权限?

时间:2015-08-03 10:11:06

标签: swift amazon-web-services amazon-s3

我想为我上传到S3的文件设置权限"阅读"对于所有用户,但找不到使用AWSS3PutObjectRequest grantRead AWSS3Permission AWSS3PermissionRead的方法。

有任何建议如何解决问题?

这是我的代码:

let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest.body = NSURL(fileURLWithPath: filePath)
uploadRequest.key = fileName
uploadRequest.bucket = S3BucketName
uploadRequest.grantFullControl = "All users" // I think here's an error
self.upload(uploadRequest)

当我注释掉uploadRequest.grantFullControl = "All users"行时,文件会被上传,但所有用户的权限都设置为无。我认为问题出在上面代码的倒数第二行。如果没有注释掉该行,我会收到此错误:

upload()失败:[错误域= com.amazonaws.AWSS3ErrorDomain代码= 0"操作无法完成。 (com.amazonaws.AWSS3ErrorDomain错误0。)" UserInfo = 0x191a5bc0 {HostId = xxx + xxxxxxx / 14 =,ArgumentValue =所有用户,消息=无法识别参数格式,ArgumentName = x-amz-grant-full-control,Code = InvalidArgument,RequestId = xxxx}]

编辑:上面的代码实际上尝试授予完全控制权限,但核心问题是相同的。我还添加了一张显示上传文件权限的图片: enter image description here

1 个答案:

答案 0 :(得分:4)

我找到了解决方案:

let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest.body = NSURL(fileURLWithPath: filePath)
uploadRequest.key = fileName
uploadRequest.bucket = S3BucketName
uploadRequest.ACL = AWSS3ObjectCannedACL.PublicRead  // there was the error
self.upload(uploadRequest)

更多详细信息:https://forums.aws.amazon.com/thread.jspa?threadID=109840 enter image description here