相关疑难解决方法(0)

iOS如何通过流式传输将大型资产文件上传到服务器

我是新的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天了,听起来有几种方法可以解决这个问题.

  1. 使用第三方库:如AFNetworking,ASIHTTPRequest(但我不想使用它,因为不知道何时会停止维护或更新)
  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)

streaming upload ios

5
推荐指数
1
解决办法
6493
查看次数

标签 统计

ios ×1

streaming ×1

upload ×1