1

我正在尝试使用网络服务将大文件从我的应用程序上传到网络服务器。

我正在将视频读入一个NSData实例并将其转换为 base64 编码的字符串。然后我将字符串传递给 web 服务。我什至尝试在上传时将视频质量降为低,但我无法在服务器上上传超过 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 以便可以工作。

非常感谢 ....

4

1 回答 1

0

你有没有机会在主线程上进行编码?如果是这样,iOS 上的看门狗计时器可能会在给定时间后确定您的应用程序已崩溃并启动您的进程。如果是这种情况,您需要在后台进程中进行编码。

于 2016-01-13T16:17:08.603 回答