来自 NSURLConnection 的 NSData 多部分响应

NSData Multi-part response from NSURLConnection

我需要进行一个 Web 服务调用,其中 returns 图像在 multipart/related 响应中(响应我已粘贴在下面的代码之后。)

我无法读取图像数据。请帮忙。 我能够在 POSTMAN 上得到回复。但不知道如何在代码中解析它。 此外,我需要帮助将 NSData 转换为 JSON 或 NSDictionary 以便我可以读取图像数据。我尝试了 NSJSONSerialization,但它返回 NULL。

这看起来像是非常合理的多部分响应,我在第二部分看到了什么似乎是有效的 JPEG(或至少是一个的开头)。看到多部分响应是非常不寻常的:我们一直在 iOS 代码中构建多部分 requests,但我们不处理多部分 responses,一般。

您的 Objective-C 代码试图将其作为图像加载,但它不是简单的图像。您实际上必须解析多部分响应。

在我们将您拖入解析此多部分响应的丑陋过程之前,您是否受困于这种响应?我更希望看到一个简单的 JSON 响应,其中包含 base-64 编码的图像。或 JSON 对可单独下载的图像的 URL 响应。

解析此 non-standard 响应需要大量丑陋的代码,所以问题是是否有机会更改响应。


听起来您似乎受困于这种格式。在这种情况下,要解析此响应,您首先必须从 NSURLResponse headers 中的 Content-Type 中获取 boundary。然后,您可以扫描 NSData 响应负载以查找 -- 后跟该边界字符串。然后每个部分将有几个 headers,后跟一个空行,然后是有效负载。第一个有效载荷是 JSON。二是形象。您可以简单地读取字节,直到遇到下一个 \r\n,然后是 --,然后是边界。整个事情以 -- 结束,后跟边界,紧接着是另一个 --.


有关如何构建多部分响应的讨论,请参阅 multipart responses in RFC 1341 (the MIME spec). Or see RFC 2388 (the multipart request created by HTML forms). Or see this example 关于如何 创建 多部分请求的讨论 Objective-C。或者只是 google "create multipart request"。一旦了解了多部分响应的创建方式,那么多部分响应的解析就会相当直观。但一定要确保在走得更远之前理解多部分有效载荷。

请参阅 Parse multipart response for image download in ios 了解一些有前途的 Objective-C 代码来解析这些类型的响应。