2016-11-10 2 views
1

Ich habe ein großes Problem, wenn ich versuche, ein Bild auf meinem Db zu aktualisieren.Multipart Image Alamofire 4 swift 3

Ich muss ein Bild hochladen, und einige Zeichenfolge Wert.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
     if let selectedImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 
      imageCropped = selectedImage 
      self.sendImageWithMultipart() 
      imagePicker.dismiss(animated: true, completion: { _ in }) 
     } 
    } 

func sendImageWithMultipart() {   
     Alamofire.upload(multipartFormData: { 
      multipartFormData in 
      multipartFormData.append("\(HGYGjihf746fg743g)".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName :"auth_token") 
      multipartFormData.append("\(0)".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName :"os") 
      multipartFormData.append("\(10.0.3)".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName :"os_version") 
      multipartFormData.append("\(3.0.3)".data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName :"app_version") 

      if let photo = self.imageCropped, let jpegImage = UIImageJPEGRepresentation(photo, 50.0) { 
       print(jpegImage) 
       multipartFormData.append(jpegImage, withName: "profile_photo", mimeType: "image/*") 
      } 
     }, to: "\(Constants.GENERAL_ADDRESS_2)\(Constants.API_MODIFYUSER_PROFILE_PHOTO)", method:.post, headers:["Content-Type":"multipart/form-data; charset=utf-8; boundary=__X_PAW_BOUNDARY__"], encodingCompletion: { 
      encodingResult in 
      switch encodingResult { 
      case .success(request: let upload, streamingFromDisk: _, streamFileURL: _): 
       upload.validate().responseJSON { 
        response in 
        if response.result.isFailure { 
         debugPrint(response) 
        } else { 
         debugPrint(response) 
        } 
       } 
      case .failure(let encodingError): 
       NSLog((encodingError as NSError).localizedDescription) 
      } 
     }) 
    } 

aber das Ergebnis ist folgende:

[Request]: "\(Constants.GENERAL_ADDRESS_2)\(Constants.API_MODIFYUSER_PROFILE_PHOTO)" 
[Response]: <NSHTTPURLResponse: 0x17023c0e0> { URL: "\(Constants.GENERAL_ADDRESS_2)\(Constants.API_MODIFYUSER_PROFILE_PHOTO)" } { status code: 500, headers { 
    "Cache-Control" = "no-cache, private"; 
    Connection = close; 
    "Content-Length" = 5545; 
    "Content-Type" = "text/html; charset=UTF-8"; 
    Date = "Thu, 10 Nov 2016 10:49:00 GMT"; 
    Server = "Apache/2.4.18 (Amazon) OpenSSL/1.0.1k-fips PHP/5.6.21"; 
    "X-Powered-By" = "PHP/5.6.21"; 
} } 
[Data]: 5545 bytes 
[Result]: FAILURE: responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(500)) 
[Timeline]: Timeline: { "Request Start Time": 500467740.667, "Initial Response Time": 500467740.793, "Request Completed Time": 500467743.733, "Serialization Completed Time": 500467743.733, "Latency": 0.126 secs, "Request Duration": 3.066 secs, "Serialization Duration": 0.000 secs, "Total Duration": 3.066 secs 

das Problem ist, wie ich das Bild oder den Content-Typen oder was konvertieren?

danke

+0

Wie spezifiziert man explizit den MIME-Typ: 'multipartFormData.append (jpegImage, mitName:" profile_photo.jpeg ", mimeType:" image/jpeg ")' – Enix

+0

konnten Sie auflösen? – Cmag

+0

Ich konnte das Problem nicht lösen. Und ich habe auch versucht, den Mimetyp, aber nichts zu spezifizieren –

Antwort

0

Dieses möglicherweise Ihr Problem beheben kann:

let endpoint = "https://api.blah/images/" + id + "/documents" 

let imageData = UIImagePNGRepresentation(image) 

Alamofire.upload(
      multipartFormData: { multipartFormData in 
       multipartFormData.append(type.data(using: String.Encoding.utf8, allowLossyConversion: false)!, withName :"type") 
       multipartFormData.append(imageData!, withName: "file.png", mimeType: "image/png") 
     }, to: endpoint, method:.post, headers:headers, encodingCompletion: { encodingResult in 
      switch encodingResult { 
      case .success(request: let upload, streamingFromDisk: _, streamFileURL: _): 
       upload.validate().responseJSON { (response) in 
        if response.result.isFailure { 
         debugPrint(response) 
        } else { 
         debugPrint(response) 
        } 
       } 
      case .failure(let encodingError): 
       NSLog((encodingError as NSError).localizedDescription) 
      } 
     }) 

scheint auf meinen Server zu erreichen, aber in meinem Fall, ich bekomme eine 400 zurück (wahrscheinlich tv4 Prüfung fehlschlägt).

+0

Das meiste sieht wie eine Antwort aus, aber wenn Sie eine in Verbindung stehende Frage haben, bitten Sie bitte diese als neue Frage. Fragenmaterial wird hier meist nicht gesehen, und Material, das eindeutig eine Frage ist, wird normalerweise von einem Moderator gelöscht. – halfer

+0

aber ich muss das Bild verwenden, nicht die URL des Bildes? –

Verwandte Themen