我目前正在通过简单的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]); }];