Ошибка загрузки из корзины S3 на IOS.

Я с трудом пытаюсь загрузить определенный файл, который я загрузил в мое S3 Bucket.

Я создал корзину под названием "Фото" и загрузил файл с именем "test.png"

После установки моего CredentialProvider в AppDelegate я попытался загрузить этот файл с помощью следующего кода:

    let transferManager = AWSS3TransferManager.defaultS3TransferManager()

    let downloadingFilePath = NSTemporaryDirectory().stringByAppendingString("test.png")
    let downloadingFileUrl = NSURL(fileURLWithPath: downloadingFilePath)
    let downloadRequest = AWSS3TransferManagerDownloadRequest()
    downloadRequest.bucket = "photos"
    downloadRequest.key = "test.png"
    downloadRequest.downloadingFileURL = downloadingFileUrl
    transferManager.download(downloadRequest).continueWithExecutor(AWSExecutor.mainThreadExecutor(), withBlock: { (AWSTask) -> AnyObject! in

        //Handle errors
        if AWSTask.error != nil
        {

            print("Error downloading: \(AWSTask.error)")

            // Retrive information important for later downloading
        }
        else
        {
            print("Download succesful..")
            var uploadResult: AnyObject! = AWSTask.result
            print("Upload result: \(uploadResult)")

            let downloadOutput = AWSTask.result as! AWSS3TransferManagerDownloadOutput                

        }
        return nil

    })

Но он продолжает выдавать мне ошибку: "Ячейка, к которой вы пытаетесь получить доступ, должна быть адресована с использованием указанной конечной точки. Пожалуйста, отправляйте все будущие запросы этой конечной точке"

Я попытался изменить свой downloaderRequest.bucket до конечной точки, которую я нашел в свойствах своего сегмента. downloaderRequest.bucket = "photos.s3-website-sa-east-1.amazonaws.com"

Но теперь он говорит: "Указанная корзина не существует, Code=NoSuchBucket"

Есть идеи, что я делаю не так? Благодарю.

3 ответа

Решение

Я наконец понял это. Поэтому проблема в том, что я создал свое ведро в южноамериканском регионе, и Amazon не смог его найти. Даже подумал, когда я нажимаю в моем регионе Амазонки, он говорит мне, что "S3 не требует выбора региона". Вам необходимо создать его в "Стандарт США".

Перед загрузкой, пожалуйста, установите всю необходимую информацию, связанную с доступом к сервису AWS. Пожалуйста, сначала используйте приведенный ниже код в вашем делегате приложения,

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    let credentialsProvider = AWSStaticCredentialsProvider(accessKey: YOUR_AWS_ACCESS_KEY, secretKey: YOUR_AWS_SECRET_KEY)
    let defaultServiceConfiguration = AWSServiceConfiguration(region: AWSRegionType.SAEast1, credentialsProvider: credentialsProvider) //Your region endpoint
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = defaultServiceConfiguration

    AWSLogger.defaultLogger().logLevel = .Verbose
    return true
}

ПРИМЕЧАНИЕ: пожалуйста, позаботьтесь о заклинании имени ведра с учетом регистра.

 func downloadFile()
 {
            let transferManager = AWSS3TransferManager.defaultS3TransferManager()
            let downloadingFilePath = NSTemporaryDirectory().stringByAppendingString("test.png")
            let downloadingFileURL = NSURL(fileURLWithPath: downloadingFilePath as String )

            let downloadReadRequest : AWSS3TransferManagerDownloadRequest = AWSS3TransferManagerDownloadRequest()
            downloadReadRequest.bucket = "photos"
            downloadReadRequest.key =  "test.png"
            downloadReadRequest.downloadingFileURL = downloadingFileURL

            let task = transferManager.download(downloadReadRequest)
            task.continueWithBlock { (task) -> AnyObject? in

                if task.error != nil
                {
                    // Success
                }
                else
                {
                    // Error
                }  
             return nil
            }
}

Эта проблема возникает из-за несоответствия области сегмента s3 и области, которую мы используем при настройке s3, вот код:

let credentialsProvider = AWSCognitoCredentialsProvider(regionType: cognitoRegion,
                                                                identityPoolId: cognitoIdentityPoolId,
                                                                identityProviderManager: customIdentityProvider)

Итак, здесь тип региона должен совпадать с типом региона вашего сегмента. Ex.

если это ваше ведро, то ваш тип региона в коде должен быть: AWSRegionType.APSouth1

Другие вопросы по тегам