我正在尝试使用网络服务将大型文件从我的应用上传到网络服务器。
我正在将视频读入NSData
实例并将其转换为base64编码的字符串。然后我将字符串传递给webservice。我甚至尝试将视频质量降低到低,同时上传仍然无法在服务器上5分钟上传视频,服务器只是停止响应。
当我检查来自服务器的编码数据时,它没有完全接收它。我认为文件的大小太大,以至于没有正确发送。下面是我的一些代码。我尝试了很多帖子中提到的很多选项,但仍然无法按照我的客户要求正确上传视频。我已经成功上传了长达4到5分钟但质量低但无法上传大视频的视频。请帮帮我。
NSData *videoData = [NSData dataWithContentsOfURL:urlVideo];
pictureDataString = [videoData base64Encoding];
----other code
xml = [xml stringByAppendingString:[NSString stringWithFormat:@"<BinaryData>%@</BinaryData>",pictureDataString]];
...other code
生成完整个xml后,我使用以下代码:
url = [NSURL URLWithString:@UploadMemory];
serviceRequest = [ASIHTTPRequest requestWithURL:url];
[serviceRequest setShouldStreamPostDataFromDisk:YES];
[serviceRequest addRequestHeader:@"Content-Type" value:@"text/xml"];
[serviceRequest appendPostData:[xml dataUsingEncoding:NSUTF8StringEncoding]];
[serviceRequest setTimeOutSeconds:86400];
[serviceRequest setDelegate:self];
[serviceRequest startAsynchronous];
我甚至尝试将NSData
实例拆分为多个部分并将单独的XML文件发送到服务器,这样我就可以节省时间并将大型视频文件上传到服务器,但我还是没有能够成功地做到这一点。
将数据编码为base64需要很长时间,因此我无法拆分编码的字符串以便将多个xml发送到服务器。请提出更好的方法。
如果有人可以告诉我如何在iOS中读取二进制格式的数据文件,那么我还有另外一个选项,因此我可以读取二进制拆分中的视频文件NSData
,然后将其转换为base64encoding这样可行。
非常感谢....
答案 0 :(得分:0)
你是否有机会在主线程上进行编码?如果是这样,iOS上看门狗定时器在一段时间后可能已经决定你的应用程序崩溃并启动你的进程。如果是这种情况,您需要在后台进程中进行编码。