2017-12-26 8 views
1

아래 코드를 사용하여 다운로드하려고하는 AWSS3에 업로드 된 이미지가 있습니다.AWS S3, Swift 3에서 이미지를 다운로드 할 수 없습니다.

코드는 transferManager.download(downloadRequest).continueWith(executor: AWSExecutor.default(), block: { (task: AWSTask<AnyObject>) -> Any? in을 통해 실행되지 않습니다.이 문제를 해결할 수있는 방법을 조언 해 줄 수 있습니까? (포드 파일)를 사용

AWS SDK 버전 pod 'AWSCore', '~> 2.6.7' pod 'AWSS3', '~> 2.6.7'

static func testDownload(){ 

    let transferManager = AWSS3TransferManager.default() 

    let downloadingFileURL = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("temp.jpg") 

    if let downloadRequest = AWSS3TransferManagerDownloadRequest(){ 

     downloadRequest.bucket = "bucket-name" 
     downloadRequest.key = "folderName/imageName.png" 
     downloadRequest.downloadingFileURL = downloadingFileURL 
     print("downloadRequest \(downloadRequest)") 
     transferManager.download(downloadRequest).continueWith(executor: AWSExecutor.default(), block: { (task: AWSTask<AnyObject>) -> Any? in 

      print("transferManager.download func called") 

      if(task.error != nil){ 
       print(task.error!.localizedDescription) 
       return nil 
      } 

      print(task.result!) 

      if let data = NSData(contentsOf: downloadingFileURL){ 

       DispatchQueue.main.async(execute: {() -> Void in 
        let image = UIImage(data: data as Data) 
        print("Downloaded Image: \(image)") 
       }) 
      } 
      return nil 
     }) 
    } 
} 

답변

1

는 그 블록은 다운로드가 완료된 후 호출됩니다 완료 핸들러입니다. 당신은 당신의 버킷 구성 또는의 Info.plist 값에 문제가 있는지보기 위해 테스트를 목적으로 메인 스레드를 사용하여 시도 할 수

downloadRequest.downloadProgress = {(bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) -> Void in 
    DispatchQueue.main.async(execute: {() -> Void in 
     //Update progress 
    }) 
} 

을 또한 : 당신은 그런 일이 같은 다운로드의 진행 상황을 추적하려면 다음 코드를 사용할 수 있습니다 또는 뭔가 다른 ...

transferManager.download(downloadRequest).continueWith(executor: AWSExecutor.mainThread(), block: { (task:AWSTask<AnyObject>) -> Any? in 

    if let error = task.error as? NSError { 
     if error.domain == AWSS3TransferManagerErrorDomain, let code = AWSS3TransferManagerErrorType(rawValue: error.code) { 
      switch code { 
      case .cancelled, .paused: 
       break 
      default: 
       print("Error downloading: \(downloadRequest.key) Error: \(error)") 
      } 
     } else { 
      print("Error downloading: \(downloadRequest.key) Error: \(error)") 
     } 
     return nil 
    } 
    print("Download complete for: \(downloadRequest.key)") 
    let downloadOutput = task.result 
    return nil 
}) 

출처 : http://docs.aws.amazon.com/mobile/sdkforios/developerguide/s3transfermanager.html

+0

도이 코드를 시도,하지만 여전히 통과하지 않습니다 .. – user44776

+0

당신이 콘솔 출력을 보여줄 수 있습니까? – Anushk

+0

S3에서 iOS 시뮬레이터로 다운로드 할 때 웹 사이트에서 Mac으로 직접 다운로드하는 것보다 10 배 더 많은 시간이 걸린다는 것을 깨달았습니다. 왜 S3가 그렇게 느린지 궁금합니다. – user44776