上传Alamofire和Multer的文件

我试图用Alamofire从iOS上传图像数据到Multer的Express服务器上。 req.file是未定义的, req.body的forms是{ file: <bytes> } 。 没有错误消息,但该文件不显示。 这是我的代码:

 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: 'public/images/content/'}).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') }) 

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

这困扰了我几个小时,任何帮助,非常感谢!

更新一个HTML表单在Express端点上工作正常,所以Alamofire发送的请求肯定是一个问题。 我已经尝试了一大堆Alamofire上传的例子,但是它们都发送了同样的错误请求。 必须有一种方法可以和Alamofire一样做一个HTML表单的请求。

另一个更新
我现在只是使用busboy连接,它运作良好,并有更多的灵活性。

我只是能够得到这个工作。 事实certificate,你必须使用Alamofire来指定文件名和mimeType,以便让multer在服务器端取得上传文件。 所以,添加图片的代码应该如下所示:

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

您的问题很可能是由于不使用multer作为中间件造成的:

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

快递中,您可以根据需要添加尽可能多的中间件:

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