使用Alamofire和multipart/form-data

Rut*_*ans 3 iphone multipartform-data ios swift alamofire

我无法以正确的方式接近我提供的API,以便为我提供我正在寻找的响应.我一直在使用Swift和Alamofire,但这是我第一次使用multipart/form-data上传图像.我可以使用Postman上传图像,但我无法通过我的应用程序使用Alamofire框架发送相同的消息.

我的邮差截图

我的Swift代码:

func postFulfilWish(wish_id: Int, picture : UIImage, completionHandler: ((AnyObject?, ErrorType?) -> Void)) {

    var urlPostFulfilWish = Constant.apiUrl;
    urlPostFulfilWish += "/wishes/";
    urlPostFulfilWish += String(wish_id);
    urlPostFulfilWish += "/fulfill/images"  ;

    let image : NSData = UIImagePNGRepresentation(UIImage(named: "location.png")!)!

    Alamofire.upload(.POST, urlPostFulfilWish, headers: Constant.headers, multipartFormData: { multipartFormData in
        multipartFormData.appendBodyPart(data: image, name: "file")
        },
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { response in
                    //This is where the code ends up now
                    //So it's able to encode my message into multipart/form-data but it's not doing it in the correct way for the API to handle it
                    debugPrint(response)
                }
            case .Failure(let encodingError):
                print(encodingError)
            }
        }
    )
}
Run Code Online (Sandbox Code Playgroud)

Est*_*ejo 7

如果还没有回答,最近我使用Alamofire使用表单数据上传图像时遇到了同样的问题.

我能够使用Postman完全按照这篇文章中的内容上传图像,但是在我的应用程序中无法使用Alamofire.

您需要检查两件事,首先是服务器所期望的文件的名称,然后是用于在multipartFormData闭包中附加正文部分的方法.

这两种方法在我的情况下不起作用 -

multipartFormData.appendBodyPart(data: imageData, name: "file")
Run Code Online (Sandbox Code Playgroud)

这一个都没有

multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: name)
Run Code Online (Sandbox Code Playgroud)

但在这一个工作辉煌 -

multipartFormData.appendBodyPart(data: imageData, name: "file", fileName: "file.jpeg", mimeType: "image/jpeg")
Run Code Online (Sandbox Code Playgroud)

问题基本上是服务器找不到具有预期名称的文件.

我希望这可以帮助别人节省时间,想知道为什么它不起作用.