如何在 Swift 中使用 Alamofire 上传带有 JSON 参数的图像?

Posted

技术标签:

【中文标题】如何在 Swift 中使用 Alamofire 上传带有 JSON 参数的图像?【英文标题】:How can I upload image with JSON parameters with Alamofire in Swift? 【发布时间】:2016-03-06 04:01:46 【问题描述】:

我需要将图像上传到服务器端点,其结构必须如下:

    
        "name": "",
        "description": "",
        "photo": imageFile
    

如何使用 Alamofire 发送这样的请求?

我试过了,但结果是错误消息Invalid type in JSON write (NSConcreteData) 这是我的代码:

    let imageData = UIImagePNGRepresentation(image)
    let base64String = imageData!.base64EncodedDataWithOptions([])
    
    let parameters = [
        "name": "name",
        "description": "desc",
        "photo": base64String
    ]
    
    let credentialData = "\(id):\(secret)".dataUsingEncoding(NSUTF8StringEncoding)!
    let base64Credentials = credentialData.base64EncodedStringWithOptions([])
    let headers = ["Authorization": "Basic \(base64Credentials)"]

    Alamofire.request(.POST, "", parameters: parameters, encoding: .JSON, headers: headers).responseJSON  (response) -> Void in
        print(response)
    

我关注了这个code

如果有其他方法请指教,谢谢。

【问题讨论】:

尝试使用 base64EncodedStringWithOptions 而不是 base64EncodedDataWithOptions 【参考方案1】:

我使用的这个方法你可能会觉得很有用

let image : UIImage = image.image!
let imageData = UIImagePNGRepresentation(image)
let base64String = imageData!.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)

【讨论】:

哇,谢谢它的工作。我想问一下 Encoding64CharacterLineLength 是什么,我可以用空数组替换它吗? 不,你不能。这是一种将图像数据转换为可以附加到 JSON 并作为参数发送的长字符串的方法 您可以创建一个不同的数组并将base64字符串附加到它并发送

以上是关于如何在 Swift 中使用 Alamofire 上传带有 JSON 参数的图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Alamofire Swift 4 在 JSON 编码中传递数据

带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire

如何在 Swift / Alamofire 中使用 multipartFormData?

Swift 4:如何使用 Alamofire 在参数中发布文件?

如何在swift中使用alamofire上传图库图片

如何使用 Swift 5 在 Xcode 10.2.1 中添加 alamofire