objective-c – 通过HTTP POST发送大文件的正确方法是什么,而不是将整个文件加载到ram?

我目前正在通过简单的http文章从iPhone上传大型视频文件到webservice的应用程序.到目前为止,我构建一个NSURLRequest并在加载请求之前预加载所有的视频文件数据.如果这个文件很大,那么这个自然会吃一吨的ram,在某些情况下,这是不可能的.

所以基本上我的问题是:是否有正确的流式传输数据或加载它的块,而不对网络服务器进行任何修改

谢谢.

编辑澄清:我正在寻找一种将大量多部分/表单数据从iPhone转移到网络服务器的方法.不是另一回事.

编辑后接受答案:我刚刚发现,苹果有一些漂亮的源代码为这个确切的目的而写,它显示附加数据到帖子不只是大文件本身.任何人都需要它:SimpleURLConnections – PostController.m

一个编辑:在使用这个source code from apple我遇到了一个非常愚蠢和丑陋的问题,甚至wirehark无法帮助我调试.某些网络服务器在引用之间声明时不明白边界字符串(如在苹果示例中).我在Apache Tomcat上遇到了问题,并删除了很有用的引号.

解决方法

您可以在NSMutableuRLRequest上使用NSInputStream.例如:
NSMutableuRLRequest *request = [[NSMutableuRLRequest alloc] initWithURL:uploadURL];
NSInputStream *stream = [[NSInputStream alloc] initWithFileAtPath:filePath];
[request setHTTPBodyStream:stream];
[request setHTTPMethod:@"POST"];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response,NSData *data,NSError *error) {
    NSLog(@"Finished with status code: %i",[(NSHTTPURLResponse *)response statusCode]);
}];

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...