我是新的iOS程序员.
我想从资产库上传一个大文件(视频或图像)到服务器,我的原始方式只是使用NSMutableURLRequest并附加NSData(大视频或大图像),并在以下代码中发生崩溃:
ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *asset){
//.......some code I just skip it...
ALAssetRepresentation *rep = [asset defaultRepresentation];
void *buffer = [rawData mutableBytes];
[rep getBytes:buffer fromOffset:0 length:size error:nil];
NSData *videoData = [[NSData alloc] initWithBytes:buffer length:size];//crash here
[self startUploading:videoData];
}
Run Code Online (Sandbox Code Playgroud)
我知道这次崩溃是因为内存不够,视频文件不能只分配给NSData.
我已经谷歌这2天了,听起来有几种方法可以解决这个问题.
我想用流媒体方式(点2)做上传的东西,
我发现这个链接:http: //zh.scribd.com/doc/51504708/10/Upload-Files-Over-HTTP
看起来可以解决我的问题,但仍然不是很清楚知道该怎么做
问题1:该链接中有一个示例,上传文件来自bundle
如何将资产转换为流?或将资产复制到APP的文件夹?
我发现此链接将图像从assets-library复制到app文件夹
但仍无法找到方法.
问题2:还是有其他更清晰的流媒体示例来上传大文件吗?
谢谢你的激情
更新1:在我实现了needNewBodyStream委托后,"请求流耗尽"消息似乎解决了,而是遇到另一个"错误域= kCFErrorDomainCFNetwork代码= 303"操作无法完成."如何解决它?
-(NSInputStream *)connection:(NSURLConnection *)connection needNewBodyStream:(NSURLRequest *)request
{
[NSThread sleepForTimeInterval:2];
NSInputStream *fileStream = [NSInputStream inputStreamWithFileAtPath:pathToBodyFile];
if …
Run Code Online (Sandbox Code Playgroud)