Carga de files con Alamofire y Multer

Estoy intentando cargar datos de image desde iOS usando Alamofire a un server Express con Multer. req.file no está definido, y req.body tiene la forma { file: <bytes> } . No hay post de error, pero el file no aparece. Aquí está mi código:

 var bodyParser = require('body-parser') var multer = require('multer') app.use(bodyParser.json()) app.use(bodyParser.urlencoded({ extended: false })) app.post('/api/photos/upload', function(req, res) { var upload = multer({ dest: 'publichttp://sofes.miximages.comcontent/'}).single('file') upload(req, res, function(err) { if (err) { console.log("Error uploading file: " + err) return } // req.file = req.body console.log(req.body) // form fields console.log(req.file) // form file }) res.json('yeah') }) 

En iOS:

 let url = fullURL("api/photos/upload") Alamofire.upload(.POST, url, multipartFormData: { multipartFormData in if let image = image { if let imageData = UIImageJPEGRepresentation(image, 0.5) { multipartFormData.appendBodyPart(data: imageData, name: "file") } } }, encodingCompletion: { encodingResult in switch encodingResult { case .Success(let upload, _, _): upload.responseJSON { response in switch response.result { case .Success: print("success") case .Failure(let error): print(error) } } case .Failure(let encodingError): print(encodingError) } }) 

¡Esto me ha desconcertado durante horas, cualquier ayuda es muy apreciada!

ACTUALIZACIÓN Un formulario HTML funcionó bien a través del punto extremo Express, por lo que definitivamente es un problema con la request que Alamofire está enviando. He probado un montón de ejemplos de carga con Alamofire, pero todos envían la misma request incorrecta. Debe haber una forma de hacer la misma request que HTML, pero con Alamofire.

OTRA ACTUALIZACIÓN
Ahora solo uso busboy-connect y está funcionando bien y con mucha más flexibilidad.

Solo pude lograr que esto funcione. Resulta que debe especificar el fileName y el mimeType usando Alamofire para que multer pueda recoger la carga en el extremo del server. Por lo tanto, su código para agregar la image debería verse algo como esto:

 if let image = image { if let imageData = UIImageJPEGRepresentation(image, 0.5) { multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "fileName.jpg", mimeType: "image/jpeg") } } 

Es probable que su problema se deba a que no usa multer como un middleware:

 var upload = multer({ dest: 'publichttp://iosberry.comcontent/'}) app.post('/api/photos/upload', upload.single('file'), function(req, res) { // req.file should be populated now }) 

En express, puede agregar tantos middlewares como necesite:

 app.post('/path', middleware1, middleware2, middleware3, ..., function(req, res) { // All middlewares has been executed })