【发布时间】:2012-03-05 05:27:23
【问题描述】:
我正在从 Rackspace 云文件下载 mp3 文件,对于大文件,我遇到了下载已成功完成但文件尚未完全下载的问题。例如,40 MB mp3 文件 (01:00:00 duration) 以 4.5 MB mp3 文件 (00:10:30 duration) 的形式下载。这不会一直发生。
- 关于发生了什么的任何指针?
- 为什么会发生这种情况,我该如何解决这个问题?
- 如何构建一个简单的校验和逻辑来检查文件是否已完全下载?
以下是我创建和发送异步请求的方式:
ASIHTTPRequest *request;
request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlString]];
[request setShouldAttemptPersistentConnection:NO];
[request setAllowResumeForFileDownloads:YES];
[request setDownloadProgressDelegate:self];
[request setShouldContinueWhenAppEntersBackground:YES];
[request setUserInfo:userInfo];
[request setDownloadDestinationPath:downloadPath];
[request setTemporaryFileDownloadPath:[NSString stringWithFormat:@"%@.download", downloadPath]];
[self.networkQueue addOperation:request];
[self.networkQueue go];
请注意,我正在使用具有 4 个并发下载的网络队列。
谢谢。
编辑(2012 年 3 月 5 日星期一下午 3:25)
因此,进一步调查显示ASINetworkQueue 正在调用requestDidFinishSelector 委托方法而不是requestDidFailSelector。 ASIHTTPRequest 对象返回的状态码是requestDidFinishSelector 方法中的206, HTTP/1.1 206 Partial Content。状态码应该是200, HTTP/1.1 200 OK。
我还是不知道为什么!我仍然不知道如何解决这个问题。看来我必须删除部分下载的文件并重新开始下载过程。此时临时文件即%@.download被删除,这个部分下载的文件被放在目标路径。
【问题讨论】:
-
你检查过是不是ASIHTTP的bug吗?
-
是的,找不到类似的东西。
-
嗨@Mustafa,我是刚将 rackspace 云服务与 iOS 集成的新手,如果你能指出可以引导我使用 iOS 连接到 rackspace 的资源,我会很高兴。有没有图书馆或SDK?
-
@bizsytes 您实际上不需要任何库或 SDK 即可在您的 iOS 应用程序中使用 rackspace 云服务器。将文件上传到云端后,只需致电(例如)
stringWithContentsOfURL:encoding:error:即可下载该文件。根据您的要求,您可以使用 NSURLConnection 或 3rd 方库,如 ASIHttp(不推荐)、AFNetworking、MKNetworkKit 等。HTH。 -
你好穆斯塔法,谢谢你的回复。实际上,服务器和数据库托管在机架空间上。那么,我认为我需要普通的旧网络服务来与服务器通信是正确的吗?或者使用托管在云上的服务器还有其他方法可以做到这一点?请原谅我的问题,因为我没有使用云服务器的经验。
标签: ios nsurlconnection asihttprequest rackspace-cloud rackspace