4

Ich habe ein Problem mit S3. Nach 3h der Fehlersuche (in der Zwischenzeit habe ich über IAM Rollen & verwaltet, um sie zu erstellen) Ich bin steckenbleiben versuchen, ein fb Profilbild zu Amazon S3 hochzuladen.Upload jpg zu S3: "Der Anfragetext wurde unerwartet beendet"

Mein Code:

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 
          }) 
         } 

** ** Problem I kontinuierlich ein The request body terminated unexpectedly Fehler von S3 bin immer die wie folgt aussieht:

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} 

Ich bin nicht sicher, was los ist falsch, ich habe debugged, und fileName, fileURL, imageData scheinen in Ordnung zu sein

+3

Es gibt einen Fehler in v2.5.1 des SDK versuchen, auf 2.5.0 herabstufen, wenn Sie können. – donkon

+0

Ich musste wegen der schnellen 3 Unterstützung upgraden:/mit 2.5 hat nichts funktioniert (Cognito, Dynamo, ...) –

+0

Swift 3 Unterstützung wurde in 2.5.0 eingeführt Die Änderung sollte keine der aufgeführten Dienste brechen ... theoretisch. Kannst du etwas darüber erzählen, wie Cognito und Dynamo nicht funktioniert haben? – donkon

Antwort

7

Es gibt einen Fehler mit dem 2.5.1 SDK ist, ich ein bisschen darüber here erklären.

Grundsätzlich schafft die AWSSignature die falsche Signatur für den Upload ...

Sie haben zwei Möglichkeiten, um es zu bekommen:

1) Revert 2.5.0 zu verwenden, indem sie alle Schoten erklären Sie brauchen explizit wie folgt: (Edit: ich habe gerade bemerkt, können Sie nicht, dass der SWIFT Problem, weil versuchen Option 2 vielleicht.)

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) ändern Sie den Code selbst das Problem zu beheben, bis Amazon beheben. Sie müssen nur die Zeilen 783-785 in der Datei AWSCore/Authentication/AWSSignature.m auskommentieren - Sie sollten eine Meldung erhalten, dass die Datei gesperrt ist, wenn Sie versuchen, entsperren Sie sie einfach.

if (self.endOfStream) { 
    return NO; 
} 
+0

Schritt 2 löste es. Vielen Dank :) –

+0

Sorry, können Sie erklären, wie Sie auf die .m-Datei zugreifen und sie ändern können? Ist es kein abgeschlossener Rahmen? –

+0

@JamesWhite Wenn Sie darauf zugreifen, werden Sie gefragt, ob Sie entsperren und bearbeiten möchten. Wählen Sie "OK" und fahren Sie fort :) –

0

Tatsächlich gibt es einen Fehler mit dem aktuellen AWSS3 SDK. WENN Sie cocoapods verwenden, können Sie die 2.5.0 (Swift 3 kompatibel) mit installieren:

pod 'AWSS3', '2.5.0' 
+0

Dies funktioniert nicht, wie: - 'AWSCore (= 2.5.1)' benötigt von 'Podfile' -' AWSCore (= 2.5.0) 'benötigt von' AWSS3 (2.5.0) ' -' AWSCore (= 2.5.1) 'benötigt von' AWSSNS (2.5.1) ' -' AWSCore (= 2.5.1) 'benötigt von' AWSCognito (2.5.1) ' -' AWSCore (= 2.5.1) 'benötigt von' AWSLambda (2.5.1) ' die anderen Module müssen 2.5.1 funktionieren (siehe letzte Kommentare von mir). –

+0

Ich stieß tatsächlich auf das gleiche Problem. Ein Pod-Update für alle zugehörigen AWS-Pods ist 2.5.0. Oder wenn Sie die AWS-Pods entfernen möchten, dann Pod-Installation mit nur AWSS3 als Pod "AWSS3", "2.5.0" wird alle AWS-Pods als 2.5.0 –

+0

installieren, siehe meinen anderen Kommentar.Meine anderen aws-Dienste werden in 2.5.0 aufgrund eines Problems mit cognito nicht funktionieren. Ich kann nicht herunterstufen –

Verwandte Themen