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

Posted

技术标签:

【中文标题】为啥我不能将文件附加为 Alamofire 中的参数值之一?【英文标题】:Why can't I append the file as one of the parameter value in Alamofire?为什么我不能将文件附加为 Alamofire 中的参数值之一? 【发布时间】:2016-04-22 08:10:23 【问题描述】:

我想知道为什么我不能将文件作为参数值之一并在 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 格式。

请注意,无论是否有图像,请求都应该通过,因为它是可选的。

【问题讨论】:

您在尝试使用参数时遇到的错误是什么? UIImage is not sent to an instance of type String 我需要将图像的值存储在参数中,并通过 for 循环 本身中的可选链接检查图像是否可用。但在这里我正在检查图像是否可用,分别。你能明白我想表达什么吗?! 【参考方案1】:

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

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

希望对您有所帮助。

【讨论】:

谢谢你!你澄清了我的疑问!!但是你能回答我对 zcui93 评论的问题吗?! 我不知道你想要什么:)

以上是关于为啥我不能将文件附加为 Alamofire 中的参数值之一?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能初始化 Alamofire 4 会话管理器?

Alamofire 访问将数据附加到全局变量

为啥我不能从将一个列表附加到另一个列表中获取元素

为啥我不能按照指定的 Go 引用将字符串附加到字节切片?

无法在 Alamofire 4.0 中使用类型为“(String,withName:String)”的参数列表调用“附加”

我正在通过使用 UITextField 获取输入来使用字符串中的特殊字符进行 api 调用,但 alamofire 会自动将其更改为一些代码