【问题标题】:How to handle large files with NSData?如何使用 NSData 处理大文件?
【发布时间】:2016-08-02 12:30:20
【问题描述】:
我有一个非常大的视频,我需要将此视频分块以将其上传到 Dropbox。
我尝试使用NSData,但是因为这个文件太大,我的应用程序总是崩溃,所以我现在不知道我能做什么。
对于较小的视频,我使用了这个:
NSData(contentsOfURL: self.newAsset.URL)!.subdataWithRange(NSMakeRange(0, 10000000))
我对此没有任何问题,但是当视频太大时出现错误:
无法分配内存
那么,我可以做些什么来分块大视频的数据呢?
【问题讨论】:
标签:
ios
swift
nsdata
avurlasset
swiftydropbox
【解决方案1】:
如果您想实现自定义,请使用NSURLSession,以获取最佳实践,否则第三方库有很多,例如RESTKit 或AFNetworking。对于NSURLSession,会话NSURLSession 支持三种类型的任务:数据任务、下载任务和上传任务。它也支持后台上传/下载。来源(apple developer)
- 数据任务使用 NSData 对象发送和接收数据。数据任务旨在用于从您的应用程序到服务器的简短的、通常是交互式的请求。数据任务可以在收到每条数据后一次将数据返回到您的应用,也可以通过完成处理程序一次性返回所有数据。
- 下载任务以文件形式检索数据,并支持在应用未运行时进行后台下载。
- 上传任务以文件形式发送数据,并支持在应用未运行时进行后台上传。
图片来源raywenderlich.com
【解决方案2】:
你应该使用视频文件 url 来使用 NSURLSession 上传大数据
- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request fromFile:(NSURL *)fileURL;