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

前端之家收集整理的这篇文章主要介绍了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]);
}];
原文链接:https://www.f2er.com/c/116619.html

猜你在找的C&C++相关文章