如何使用包含json字符串和文件系统中的大文件的多部分数据发送HTTP请求?

时间:2015-11-20 12:14:50

标签: ios http nsurlrequest nsinputstream

上下文

我想发送一个HTTP请求,其中包含由两个段组成的多部分正文数据:

  1. 包含一些元数据的JSON字符串
  2. 某些文件二进制数据
  3. 我已经知道的

    这可以很容易地完成,如answer中所述。但是在文件可​​能很大的情况下会发生什么?使用这个新约束,我们自然无法将数据封装在NSData对象中,因为它会占用大量内存资源。

    熟悉NSURLRequest类的人的第一个想法是使用HTTPBodyStream属性而不是HTTPBody。但是如何才能获得一个可以写入JSON和文件数据段的流(以及边界和其他所需的HTTP内容)?

    出路是NSInputStream的子类。事实上,我注意到AFNetworking框架使用了这种方法。但是从我听说过,有很多未记录/奇怪的方法可以覆盖NSStream类,如here所述,我认为这听起来很多(有潜在危险) )工作需要实现一些看似简单的事情。

    问题

    有没有办法达到预期的行为?请考虑以下限制:

    • 没有第三方框架
    • 使用干净的方法(不覆盖未记录的方法,因为它们可以在将来的SDK上更改)

1 个答案:

答案 0 :(得分:1)

您可以使用我的开源POSInputStreamLibrary。它提供了流式传输所需数据的功能。您唯一需要做的就是实现POSBlobInputStreamDataSource协议并将实现用作POSBlobInputStream的参数。

如果您严格限制使用第三方框架,则可以使用POSBlobInputStream作为实现私有API方法的示例,以使自定义NSInputStream可用。

随时提出有关实施细节和好运的任何问题。