微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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]);
}];

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐