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.