2016-05-02 4 views
0

Мне сложно загружать определенный файл, который я загрузил в свой S3 Bucket.Ошибка загрузки с S3-ведра на IOS.

Я создал ведро под названием «Фото» и загрузить файл с именем «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»

Но теперь он говорит: «Указанный ведро не существует, код = NoSuchBucket»

Любые идеи о том, что Айв делать неправильно? Благодарю.

+0

У меня точно такой же вопрос! Я надеюсь, что кто-то здесь поможет нам. –

ответ

1

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

0

Перед загрузкой, пожалуйста, установите всю необходимую информацию о доступе услуги 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 
      } 
} 
+0

Я попытался использовать AWS_ACCESS_KEY и AWS_SECRET_KEY, но он все еще не работает ... Я также пытался использовать Cognito, но он все еще не работает. «Указанное ведро не существует, Code = NoSuchBucket» –

+0

Какая ошибка все еще существует? Повторите мой ответ, потому что я редактирую его еще с одной функцией. –

+0

Я сделал все, что вы сказали, и я все равно получаю: «Ведро, к которому вы пытаетесь получить доступ, должно быть адресовано с использованием указанной конечной точки. Пожалуйста, отправьте все будущие запросы в эту конечную точку» –

0

эта проблема происходит из-за несоответствие области s3 ведра и области мы используем при настройке s3 здесь код:

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

так, здесь тип области должен быть таким же ваш типа ковша области. Ex. enter image description here

, если это ваше ведро тогда, ваш regiontype в коде: AWSRegionType.APSouth1