2016-01-21 99 views
1

我試圖使用以下代碼上傳圖像時收到請求超時。奇怪的是,我甚至沒有收到S3的失敗回覆。無法使用Alamofire直接上傳到S3

[Request]: <NSMutableURLRequest: 0x12d958f20> { URL: https://[redacted].s3.amazonaws.com/96d5b0e9-4606-4a8d-bd22-8d30f840361a/611ad69fb0452bd7c806886cf6404b34-original.png?AWSAccessKeyId=[redacted]&Content-Type=image%2Fpng&Expires=1453484324&Signature=[redacted]&x-amz-acl=public-read } 
[Response]: nil 
[Data]: 0 bytes 
[Result]: FAILURE: Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo={NSUnderlyingError=0x12d946590 {Error Domain=kCFErrorDomainCFNetwork Code=-1001 "(null)" UserInfo={_kCFStreamErrorCodeKey=-2102, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=https://[redacted].s3.amazonaws.com/96d5b0e9-4606-4a8d-bd22-8d30f840361a/611ad69fb0452bd7c806886cf6404b34-original.png?AWSAccessKeyId=[redacted]&Content-Type=image%2Fpng&Expires=1453484324&Signature=[redacted]&x-amz-acl=public-read, NSErrorFailingURLKey=https://[redacted].s3.amazonaws.com/96d5b0e9-4606-4a8d-bd22-8d30f840361a/611ad69fb0452bd7c806886cf6404b34-original.png?AWSAccessKeyId=[redacted]&Content-Type=image%2Fpng&Expires=1453484324&Signature=[redacted]&x-amz-acl=public-read, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-2102, NSLocalizedDescription=The request timed out.} 

class func avatar (uploadURL: String, avatar: UIImage, callback: (String?) -> ()) { 

    print("Upload to \(uploadURL)") 
    Alamofire.upload(.POST, uploadURL, multipartFormData: { multipartFormData in 
     if let imageData = UIImagePNGRepresentation(avatar) { 
      multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "file.png", mimeType: "image/png") 
     } 
    }, encodingCompletion: { encodingResult in 
     print("Encoded") 
     switch encodingResult { 
     case .Success(let upload, _, _): 
      print("About to Upload") 
      upload.responseJSON { response in 

       print("Status code: \(response.response?.statusCode)") 
       print(response.debugDescription) 

       switch response.result { 
       case .Success: 
        callback("url") 
       case .Failure: 
        callback(nil) 
       } 

      } 
     case .Failure(let encodingError): 
      print("===== ERROR ENCODING PNG =====") 
      print(encodingError) 
     } 
    }) 

} 

回答

0

我遇到類似的問題時,我並沒有在正是S3期待的格式獲得由多個部分組成的形式。它從來沒有返回響應,而不是一個錯誤。

這裏是我是如何結束髮送多形式的文件部分

multipartFormData.appendBodyPart(stream: NSInputStream(data: imageData), 
           length: UInt64(imageData.length), 
           headers: ["Content-Disposition": "form-data; name=\"file\"", 
              "Content-Type": "application/octet-stream"])