2017-06-14 10 views
0

Ich erstelle gerade eine App, in der ich ein Bild von einem iOS-Gerät an meinen Expressjs-Server senden werde, unter Verwendung der multer Middleware. Ich habe die Server-Seite eingerichtet, aber ich glaube, ich habe einen Fehler auf der Client-Seite, weil ich meine POST-Anfrage nicht richtig funktionieren kann. Hier ist mein schneller Code.Bild auf Node.js Express Server hochladen Swift

 class func changeChannelImage(handle: String, imageURL: URL, completionHandler: @escaping (Int?, Error?) -> Void){ 
    let baseURL = "http://10.0.0.220:3000/channel/channelImage?handle=\(handle)" 

    func createRequestBodyWith(parameters:[String:NSObject], boundary:String) -> Data{ 

     var body = Data() 

     for (key, value) in parameters { 
      body.appendString(string: "--\(boundary)\r\n") 
      body.appendString(string: "Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n") 
      body.appendString(string: "\(value)\r\n") 
     } 

     body.appendString(string: "--\(boundary)\r\n") 

     var mimetype = "image/png" 

     let defFileName = "channelImage.png" 
     print(imageURL.absoluteString) 
     do { 
      var data = try Data(contentsOf: imageURL) //Image file URL in device's directory 
      var image = UIImage(data: data) 

      let imageData = UIImagePNGRepresentation(image!) 

      body.appendString(string: "Content-Disposition: form-data; filename=\"\(defFileName)\"\r\n") 
      print("Content-Type: \(mimetype)\r\n\r\n") 
      body.appendString(string: "Content-Type: \(mimetype)\r\n\r\n") 
      body.append(imageData!) 
      body.appendString(string: "\r\n") 

      body.appendString(string: "--\(boundary)--\r\n") 
     } 
     catch { 
      print(error.localizedDescription) 
     } 

     return body 
    } 
    func generateBoundaryString() -> String { 
     return "Boundary-\(NSUUID().uuidString)" 
    } 

    var request = URLRequest(url: URL(string: baseURL)!) 
    request.httpMethod = "POST" 
    let boundary = generateBoundaryString() 
    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type") 
    request.httpBody = createRequestBodyWith(parameters: [:], boundary: generateBoundaryString()) 


    let session = URLSession.shared 
    let task = session.dataTask(with: request) { (data, response, error) in 
     if error == nil { 
       let res = response as! HTTPURLResponse 
       let code = res.statusCode 
       if code != 200 { 
        print(String(data: data!, encoding: .utf8)) 
       } 
       DispatchQueue.main.async { 
        completionHandler(code, nil) 
       } 
     } 
     else { 
      print(error!) 
      DispatchQueue.main.async { 
       completionHandler(0, error) 
      } 

     } 
    } 
    task.resume() 

} 

Hat jemand eine Idee, warum die Bilddatei vom Server nicht richtig gelesen werden kann? Jede Hilfe wäre willkommen.

Antwort

2

Konvertieren Sie Ihre Bilddaten in Base64 String und fügen Sie sie dann in Körper