为什么我不能将文件作为Alamofire中的参数值之一附加?

时间:2016-04-22 08:10:24

标签: ios swift post file-upload alamofire

我想知道为什么我不能将文件作为参数值之一,并将参数作为上传请求发送到Alamofire。我试过这样,但它确实有效。

let parameters: [String : AnyObject ] = [
        "email" : "abc@gmail.com",
        "password" : "password",
        "full_name": "XXX"]

let image: UIImage? = UIImage(named: "logo.png")

    Alamofire.upload(
        .POST,
        "http://myurl.com/register",
        multipartFormData: { multipartFormData in

            for (key, value) in parameters {
                multipartFormData.appendBodyPart(data: value.dataUsingEncoding(NSUTF8StringEncoding)!, name: key)
              }

                if let imageData = UIImageJPEGRepresentation(image!, 1) {
                multipartFormData.appendBodyPart(data: imageData, name: "profile_pic", fileName: "logo.png", mimeType: "image/png")
              }
       },
        encodingCompletion: { encodingResult in
            switch encodingResult {
            case .Success(let upload, _, _):
                upload.responseJSON { response in
                    debugPrint(response)
                }
            case .Failure(let encodingError):
                print(encodingError)
            }
        }
    )

为什么我不能将图像作为参数值传递?还有为什么我需要更改UIImageJPEGRepresentation中的图像。

如果我将图像作为值传递而不更改表示,则错误会导致它不是NSData格式。

请注意,即使有图像,请求也应该通过,因为它是可选的。

1 个答案:

答案 0 :(得分:0)

如您所知,Alamofire只是一个图书馆,可以帮助您处理NSURLRequest。这是客户端可以通过HTTP请求与服务器通信的常用方法。其他平台(如Android,桌面或Web ......)也使用这种方式。所以它们必须是相同的格式。 post body只接受简单的数据格式,如String,Int或byte [] ......它不知道什么是UIImage,而是NSData。 NSData是byte []的格式。

因此,如果您要上传文字文件或视频,则必须将其转换为NSData

希望得到这个帮助。