我正在尝试使用Alamofire从iOS上传图像数据到带有Multer的Express服务器。 req.file
未定义,req.body
的形式为{ 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-connect,它运行良好,并且具有更多的灵活性。