Возврат ошибки ENOTCONN

Я пытаюсь загрузить изображение в корзину Aws S3. Я пытался следовать руководству и получаю сообщение об ошибке «Возврат ENOTCONN, поскольку протокол еще не настроен». Я новичок в Swift и не могу понять, почему возникает ошибка. Мой код для загрузки S3 выглядит следующим образом:

 let uploadRequest = AWSS3TransferManagerUploadRequest()
 uploadRequest?.body = url!
 uploadRequest?.key = remoteFileName
 uploadRequest?.bucket = S3BucketName
 uploadRequest?.contentType = "image/" + ext

 let transferManager = AWSS3TransferManager.default()

 // Perform Upload
 transferManager.upload(uploadRequest!).continueWith(block: { (task:AWSTask<AnyObject>) -> AnyObject! in

      if let error = task.error{
                print("error \(error.localizedDescription)")
            }

      if task.result != nil {
            let url = AWSS3.default().configuration.endpoint.url
            let publicURL = url?.appendingPathComponent((uploadRequest?.bucket!)!).appendingPathComponent((uploadRequest?.key!)!)
               print("Uploaded to:\(publicURL)")
            }
             return nil
 })

Мой S3 находится в ap-south-1, а идентификатор пула когнито — в us-west-2. Я предполагаю, что это создает проблему. Есть ли способ решить проблему, не создавая еще одно ведро в us-west-2. Я получаю следующую ошибку:

ошибка


person Geethanjali Reddy    schedule 22.11.2017    source источник
comment
Настроена ли у вас соответствующая политика для корзины S3?   -  person Anushk    schedule 22.11.2017
comment
Да. Моя политика корзины следующая: {Версия: 2008-10-17, Утверждение: [ { Sid: AddPerm, Эффект: Разрешить, Принципал: , Действие: s3:GetObject, Ресурс: arn:aws:s3: ::сохтест/ } ] }   -  person Geethanjali Reddy    schedule 22.11.2017
comment
Правильно ли вы установили идентификатор пула когнито и регион в Info.Plist? Я думаю, вы использовали код в демо-версии AWS github.   -  person rajtharan-g    schedule 11.01.2018


Ответы (1)


Вы хотите, чтобы политика корзины была примерно такой, если пул cognito не настроен для аутентификации: обратите внимание на значения Principal и Action Политика корзины

Кроме того, есть ли какая-то особая причина, по которой вы используете AWSS3TransferManagerUploadRequest? Если политика не решает вашу проблему, вы можете использовать следующий код для AWSS3TransferUtilityUploadExpression, который асинхронно отправляет ваши данные фрагментами.

   let expression = AWSS3TransferUtilityUploadExpression()

    expression.progressBlock = progressBlock

    transferUtility.uploadData(UIImagePNGRepresentation(imageNew!)!,
                               bucket: "bucket-name",
                               key: (imgName.removeWhitespace()),
                               contentType: "image/png",
                               expression: expression,
                               completionHandler: completionHandler).continueWith { (task) -> AnyObject! in
                                                if let error = task.error {
                                                    print("Error: \(error.localizedDescription)")
                                                }

                                                if let _ = task.result {
                                                    print("Upload Starting!")
                                                    // Do something with uploadTask.
                                                }

                                                return nil;
                }
person Anushk    schedule 22.11.2017
comment
Я отредактировал вопрос и включил изображение ошибки, которую я получаю. - person Geethanjali Reddy; 23.11.2017