无法将UIImage编码为POST请求的数据

时间:2018-01-09 20:50:24

标签: ios swift request uiimage

我正在将UIImage转换为要通过http POST请求发送到服务器的数据。在为请求准备正文时,将调用函数createBody,并且传递给此函数的图像数据为UIImageJPEGRepresentation(image, 0.7)!

static func createBody(parameters: [String: String],
                boundary: String,
                data: Data,
                mimeType: String,
                filename: String) -> Data {

    let body = NSMutableData()

    let boundaryPrefix = "--\(boundary)\r\n"

    for (key, value) in parameters {

        body.appendString(boundaryPrefix)
        body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
        body.appendString("\(value)\r\n")
    }

    body.appendString(boundaryPrefix)
    body.appendString("Content-Disposition: form-data; name=\"file\"; filename=\"\(filename)\"\r\n")
    body.appendString("Content-Type: \(mimeType)\r\n\r\n")
    body.append(data) // theres something about appending this image data that is causing problems

    body.appendString("\r\n")
    body.appendString("--".appending(boundary.appending("--")))

    print(body as Data)
    print(String(data: data, encoding: .utf8) ?? "unable to print data")

    return body as Data
}

控制台显示:

368185 bytes
unable to print data

如果图像数据未附加到正文,则会打印body而不会出现任何问题。当附加图像数据时,显然存在,因为body的大小相当大(368185字节对191字节),但下一行读取unable to print data。这个UIImage数据有什么不允许它与身体中的其他文本一起编码?如果它与编码有关,那么我怎么能用文本和数据打印正文以及如何格式化以通过POST发送到服务器?

1 个答案:

答案 0 :(得分:3)

您正尝试将图像数据转换为String,假设它是UTF8数据。它不是,因此不会产生print(data.base64EncodedString()) 。图像数据可能包含许多不可打印的字符。

作为替代方法,您可以从数据中打印base64编码的字符串:

df = pd.DataFrame({'hour': [9.0, 9.0, 9.0, 10.0],
                   'min': [12.0, 13.0, 55.0, 2.0],
                   'sec': [42.0, 30.0, 12.0, 5.0]})

>>> df
   hour   min   sec
0   9.0  12.0  42.0
1   9.0  13.0  30.0
2   9.0  55.0  12.0
3  10.0   2.0   5.0