Cargar jpg a S3: "El cuerpo de la request terminó inesperadamente"

Me enfrento a un problema con S3. Después de 3 horas de solución de problemas (mientras tanto, aprendí sobre los roles de IAM y logré crearlos) Estoy atrapado tratando de upload una image de perfil fb a amazon S3.

Mi código:

if let imageData = NSData(contentsOf: NSURL(string: url) as! URL) { let fileName = ProcessInfo.processInfo.globallyUniqueString + ".jpg" let fileURL = NSURL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(fileName) let image = UIImage(data: imageData as Data) let imageData = UIImageJPEGRepresentation(image!, 1.0)! do { try imageData.write(to: fileURL! as URL) } catch _ { self.log.error("Could not write to file.") } let transferManager = AWSS3TransferManager.default() let uploadRequest = AWSS3TransferManagerUploadRequest() uploadRequest?.bucket = "app-files" uploadRequest?.key = "user-data/" + awsId! + "_primary_profile_picture.jpg" uploadRequest?.body = fileURL! transferManager.upload(uploadRequest!).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 uploading: \(uploadRequest?.key) Error: \(error)") } } else { print("Error uploading: \(uploadRequest?.key) Error: \(error)") } return nil } let uploadOutput = task.result print("Upload complete for: \(uploadRequest?.key)") return nil }) } 

** Problema ** Continuamente obtengo un error en el The request body terminated unexpectedly de S3 que se ve así:

 Error uploading: Optional("user-data/eu-west-1:xxxx-xxxx-xxxx-xxxx-xxxxxxxxxx_primary_profile_picture.jpg") Error: Error Domain=com.amazonaws.AWSS3ErrorDomain Code=0 "(null)" UserInfo={HostId=XXX, Message=The request body terminated unexpectedly, Code=IncompleteBody, RequestId=1485A0FFBD7819D7} 

No estoy seguro de qué va mal, he depurado, y fileName, fileURL, imageData parece estar bien

Hay un error con el SDK 2.5.1, explico un poco sobre esto aquí .

Básicamente, AWSSignature crea la firma incorrecta para la carga …

Tienes dos forms de solucionarlo:

1) Volver a usar 2.5.0 declarando explícitamente todos los pods que necesita de esta manera: (Editar: Acabo de darme count de que no puede hacerlo debido al problema de SWIFT. Intente con la opción 2)

 pod 'AWSCore', '2.5.0' pod 'AWSCognito', '2.5.0' pod 'AWSLambda', '2.5.0' pod 'AWSSNS', '2.5.0' pod 'AWSS3', '2.5.0' 

2) Cambie el código usted mismo para solucionar el problema hasta que Amazon lo solucione. Todo lo que necesita hacer es comentar las líneas 783-785 en el file AWSCore / Authentication / AWSSignature.m – debería recibir un post de que el file está bloqueado si lo intenta, solo desbloquee.

 if (self.endOfStream) { return NO; } 

De hecho, hay un error con el AWK3 SDK actual. SI está utilizando cocoapods, puede instalar 2.5.0 (Swift 3 compatible) con:

 pod 'AWSS3', '2.5.0'