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

Ios 如何使用包含json字符串和来自文件系统的大文件的多部分数据发送HTTP请求? 上下文,ios,http,nsurlrequest,nsinputstream,Ios,Http,Nsurlrequest,Nsinputstream,我想发送一个HTTP请求,其中包含由两段组成的多部分正文数据: 包含一些元数据的JSON字符串 一些文件二进制数据 我已经知道的 如本节所述,这可以很容易地完成。但是,如果文件可能很大,会发生什么情况呢?有了这个新的约束,我们自然无法将数据封装在NSData对象中,因为这将占用大量内存资源 熟悉NSURLRequest类的人的第一个想法是使用HTTPBodyStream属性,而不是HTTPBody。但是,如何才能获得一个同时写入JSON和文件数据段(以及边界和其他所需HTTP内容)的流呢 解决

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

  • 包含一些元数据的JSON字符串
  • 一些文件二进制数据

  • 我已经知道的 如本节所述,这可以很容易地完成。但是,如果文件可能很大,会发生什么情况呢?有了这个新的约束,我们自然无法将数据封装在
    NSData
    对象中,因为这将占用大量内存资源

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

    解决方法是子类
    NSInputStream
    。事实上,我注意到AFNetworking框架使用了这种方法。但据我所知,有很多未记录的/奇怪的方法可以从
    NSStream
    类中重写,如前所述,在我看来,要实现一些看似简单的东西,需要做很多(潜在危险的)工作


    问题: 有没有办法达到预期的行为?请考虑以下约束:

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

      • 您可以使用我的开源软件。它提供了流式传输任何您想要的数据的能力。您需要做的唯一一件事是实现协议,并将实现用作的参数

        如果您强烈限制使用第三方框架,您可以使用实现私有API方法的示例,以使自定义NSInputStream可行


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

        谢谢您的回答。这看起来是一个有趣的方法,我想它会解决我的问题。但是我查看了POSBlobInputStream类的实现,发现您没有实现“\u scheduleincfrunlop:forMode:”、“\u setCFClientFlags:callback:context:”和“\u unscheduleFromCFRunLoop:forMode:”方法。这些是我在问题中提到的“危险的未记录”方法。从我在这个链接中读到的内容来看:它们可能导致应用程序崩溃,但当然,我还没有实现任何东西。根据您的经验,您认为NSInputStream子类在不实现这些方法的情况下应该正常工作吗?谢谢您的提问,@GabrielHuff。神奇之处在于方法
        resolveInstanceMethod:
        。它在输入未知的选择器时切断了前缀“\u1”,并尝试将调用重定向到没有前缀的方法。您可以查看
        \u scheduleInCFRunLoop:forMode:
        \u setCFClientFlags:callback:context:
        \u unscheduleFromCFRunLoop:forMode:
        中没有下划线的同伴