Swift iOS: невозможно загрузить изображение в AWS S3 - PullRequest
0 голосов
/ 23 сентября 2019

Итак, я создал корзину S3 со следующей политикой:

{
    "Version": "2012-10-17",
    "Id": "Policy123",
    "Statement": [
        {
            "Sid": "Stmt123",
            "Effect": "Allow",
            "Principal": {
                "AWS": "User_ARN"
            },
            "Action": "s3:ListBucket",
            "Resource": "Buckent_ARN"
        },
        {
            "Sid": "Stmt1569218242333",
            "Effect": "Allow",
            "Principal": {
                "AWS": "User_ARN"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "Buckent_ARN/*"
        }
    ]
}

Я также создал Cognito Identity Pool и пользователя IAM.Теперь я пытаюсь загрузить изображение в мое ведро из моего приложения и получаю: операция не может быть завершена.(com.amazonaws.AWSS3TransferUtilityErrorDomain error 2.)

В моем AppDelegate я настраиваю следующее:

 let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.usWest2,
           identityPoolId:"us-west-2:XXXXX")

        let configuration = AWSServiceConfiguration(region:.usWest2, credentialsProvider:credentialsProvider)

        AWSServiceManager.default().defaultServiceConfiguration = configuration

и пытаюсь загрузить свое изображение следующим образом:

if let imageToUpload =  self.myImage {
    let awsTransferUtilitytransferUtility = AWSS3TransferUtility.default()
    let s3BucketName = "my-bucket"

    let pngImage = imageToUpload.pngData()
    let filename = "someImage.png"
    let fileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(filename)
    do {
        try pngImage?.write(to: fileURL)

        awsTransferUtilitytransferUtility.uploadData(pngImage!, bucket: s3BucketName, key: filename, contentType: "img/png", expression: nil) { (uploadTask, error) in
            if error != nil {
                print("error is: \(error!.localizedDescription)")
            } else {
                print("Task Result: \(uploadTask)")
            }
        }

    } catch {
        print("File not saved!")
    }
}

Я почти уверен, что это проблема с разрешениями, потому что я создал общедоступную корзину и смог загрузить изображение без проблем.Я новичок в AWS, и разрешения меня очень смущают.Я создал роль IAM, которую я назначил политике сегментов, и настроил пул идентификации Cognito.Но какая связь между Cognito и IAM?Нужно ли указывать в своем коде учетные данные IAM для загрузки?Я сделал мою настройку со следующей статьей: https://medium.com/@haydnjmorris/uploading-photos-to-aws-s3-getting-started-with-cognito-and-iam-c96ba5b5496d

Любая помощь будет принята с благодарностью!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...