首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >S3上传自iOS Swift - AWSS3TransferUtility不上传

S3上传自iOS Swift - AWSS3TransferUtility不上传
EN

Stack Overflow用户
提问于 2020-12-05 20:46:22
回答 1查看 1.6K关注 0票数 1

兄弟们,

我有一个要求,在S3上传在一个认知-未经认证+认知认证状态。

(上传应该忽略认知凭证,但可能发生在两个州)

我有一个认知身份池,为它创建了一个未经授权的角色。我也有一个认知用户池。

我有一个专用的水桶。在尝试了几次快速代码+ S3策略+角色策略之后,它无法工作。

Swift:

代码语言:javascript
复制
    class func uploadfile(fileURL: URL, s3Key: String)
    {
        let credentialsProvider = AWSStaticCredentialsProvider(accessKey: awsAccessKey, secretKey: awsSecretKey)
        //let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.EUCentral1, identityPoolId:"cognito_identity_pool_id")
        
        let configuration = AWSServiceConfiguration(region:.EUCentral1, credentialsProvider:credentialsProvider)
        AWSServiceManager.default().defaultServiceConfiguration = configuration
        
        let tuConf = AWSS3TransferUtilityConfiguration()
        tuConf.isAccelerateModeEnabled = false
        
        AWSS3TransferUtility.register(
            with: configuration!,
            transferUtilityConfiguration: tuConf,
            forKey: "utility-key"
        )
        
        guard let transferUtility = AWSS3TransferUtility.s3TransferUtility(forKey: "utility-key")
        else
        {
            return
        }

        let expression = AWSS3TransferUtilityUploadExpression()
        expression.progressBlock = {(task, progress) in
            print("progress \(progress.fractionCompleted)")
        }
        
        var completionHandler: AWSS3TransferUtilityUploadCompletionHandlerBlock?
        completionHandler = { (task, error) -> Void in
            print("task finished")
        }
        
        let bucketName = "bucket name (not ARN)"
        guard let data = try? Data.init(contentsOf: fileURL)
        else
        {
            return
        }
    
        transferUtility.uploadData(data as Data, bucket: bucketName, key: s3Key, contentType: "text/plain", expression: expression,
        completionHandler: completionHandler).continueWith
        {
            (task) -> AnyObject? in
            if let error = task.error {
                print("Error: \(error.localizedDescription)")
            }
            
            if let _ = task.result {
                print ("upload successful.")
            }
            
            return nil
        }
    }

这里是桶策略:

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Id": "PolicyID",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "ARN for Cognito Identity pool unauthorized role"
            },
            "Action": "s3:*",
            "Resource": "ARN for bucket to upload"
        }
    ]
}

以下是身份池的角色策略--未经授权的角色(在上文的桶策略中提到):

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

注意:,我想限制上面的角色策略(因为这是客户未经授权的上传),而不是完全访问,但是即使是完全访问上传也是不成功的。

我已经尝试过的:

  • --上面的Swift代码--评论说,在多次调用uploadfile()时,我已经尝试过并失败了
  • ,我只得到了“上传成功”。但不是“任务完成”或“进度”信息。第一次,我收到所有3条消息。
  • 我已经清除了Keychain的缓存(用于模拟器)--只是为了在AWS侧更改后刷新凭据。没有结果。

谢谢您抽时间见我!

EN

回答 1

Stack Overflow用户

发布于 2020-12-08 13:18:06

我用以下解决方案解决了这个问题:

桶策略:

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Id": "PolicyID",
    "Statement": [
        {
            "Sid": "StatementID",
            "Effect": "Allow",
            "Principal": {
                "AWS": "bucket_arn"
            },
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "bucket_arn/*"
        }
    ]
}

与未经认证的认知角色相关的政策:

代码语言:javascript
复制
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "s3:PutObject",
            "Resource": "bucket_arn"
        }
    ]
}

iOS代码更改为(添加了以下语句):

代码语言:javascript
复制
tuConf.bucket = "bucket_name (not ARN, not full bucket URL, just name)"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65161784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档