使用Alamofire和Multer上传文件

cli*_*gos 5 node.js ios express multer alamofire

我正在尝试使用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')
})
Run Code Online (Sandbox Code Playgroud)

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

    })
Run Code Online (Sandbox Code Playgroud)

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

更新 HTML表单在Express端点上工作正常,因此它绝对是Alamofire发送请求的问题.我已经尝试了一些使用Alamofire上传的示例,但它们都发送了相同的错误请求.必须有一种方法可以与HTML表单进行相同的请求,但使用Alamofire.

另一个更新
我现在只是使用busboy-connect,它运行良好,并且具有更大的灵活性.

小智 8

我只是能够让这个工作.事实证明,您必须使用Alamofire指定fileName和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")
    }
}
Run Code Online (Sandbox Code Playgroud)