iOS - 流式传输大型文件以便上传(使用NSData分配过大文件时应用程序崩溃)

时间:2012-04-10 11:41:57

标签: objective-c ios xcode file-upload nsdate

简介

我目前在Vimeo风格的应用程序中进行了一些错误修复,也就是说,用户可以通过手机或iPad录制视频,然后上传视频供其他用户查看。由于我们现在处理上传的方式,目前的问题与上传大文件有关。

问题

所以问题基本上是在将文件上传到服务器时,我们首先分配必须在 NSData 对象中上传的所有字节。然后,此字符串将附加到标准HTTP Post消息,然后接收API将处理它。 问题是,对于大文件大小(视频很快就会出现),应用程序会崩溃,因为NSData对象在iDevice上占用了太多内存。

这是该过程的工作方式:

    Byte *buffer = malloc(content.defaultRepresentation.size);

    NSUInteger buffered = [content.defaultRepresentation getBytes:buffer fromOffset:0.0 length:content.defaultRepresentation.size error:nil];

    NSData *data = [NSData dataWithBytesNoCopy:buffer length:buffered];

    NSData *movieData = [NSData dataWithData:data];

我只是从已保存在iPhone或iPad的标准相机胶卷中的视频中获取字节。然后我将这些字节放入NSData对象。然后,来自此NSData对象的字节串将简单地附加到简单的HTTP post消息并发送到API。

问题

然后问题是,我看到的问题是整个字节字符串必须在单个HTTP Post消息中发送。那么有没有什么方法可以加载电影文件的块并将其附加到帖子消息,这样你一次不会占用太多内存?或者你怎么能这样做?

感谢您的时间:)

1 个答案:

答案 0 :(得分:2)

我建议你使用ASIHTTPRequest库。它可以直接从手机上传文件,而不是先将文件加载到内存中。这里的逻辑是上传电影文件,将其分成多个部分,称为多部分,然后以队列方式上传