ios - 为什么我无法将文件作为 Alamofire 中的参数值之一附加?

标签 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 格式。

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

最佳答案

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

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

希望这有帮助。

关于ios - 为什么我无法将文件作为 Alamofire 中的参数值之一附加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36788401/

相关文章:

c# - 带参数的 webapi post 方法不起作用

ios - 将静态 UIButton 叠加到 UICollectionView 上

ios - 在 macOS Catalina(Catalyst 应用程序)上未收到静默推送通知(背景)

android - iOS 和 Android 开发的 C 编译器差异

ios - 数组自发清空

ios - 如何通过通讯录获取用户

java - 单击按钮后如何获取 JSON 中的 id,并希望在 post 方法中再次发送该 id

php - $_POST 未通过 AJAX 调用设置

ios - 是什么导致 APNS token 发生变化?

ios - UIButton 中的按钮和图像对齐问题