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

car*_*ess 12 sockets http objective-c ios ios5

我目前正致力于通过简单的http帖子将大型视频文件从iPhone上传到网络服务的应用程序.截至目前,我在加载请求之前构建了NSURLRequest并预加载了所有视频文件数据.如果档案相当大,这自然会占用大量的公羊,在某些情况下甚至不可能.

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

谢谢.

编辑澄清:我正在寻找一种方法将大型多部分/表格数据 iPhone 流式传输网络服务器.不是另一种方式.

在接受回答之后编辑:我刚刚发现苹果为此目的编写了一些漂亮的源代码,并且它显示了向帖子附加额外数据而不仅仅是大文件本身.任何人都需要它:SimpleURLConnections - PostController.m

还有另一个编辑:在使用苹果公司的那段源代码时,我遇到了一个非常愚蠢和丑陋的问题,即使是wireshark也无法帮我调试.一些Web服务器在引号之间声明它时不理解边界字符串(例如在apples示例中).我在Apache Tomcat上遇到了问题并且删除了引号非常棒.

leo*_*leo 14

您可以使用NSInputStreamNSMutableURLRequest.例如:

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]);
}];
Run Code Online (Sandbox Code Playgroud)