0

我正在尝试使用 AFNetworking 从我的服务器下载自定义文件类型 - 出于某种原因,它说它已成功下载文件,但结果似乎已损坏。

这是我在日志中得到的:

2013-04-20 11:17:40.326 app[18083:907] start downloads
2013-04-20 11:17:40.392 app[18083:907] Sent 283280 of 283280 bytes, /var/mobile/Applications/187878BC-9D5A-4E1C-9EE4-34512D93BF68/Documents/theprice.cm
2013-04-20 11:17:40.393 app[18083:907] Successfully downloaded file to /var/mobile/Applications/187878BC-9D5A-4E1C-9EE4-34512D93BF68/Documents/theprice.cm

我的互联网速度很快,但它肯定没有在 0.04 秒内下载 283,280 字节。

这是我的 AFNetworking 代码:

NSLog(@"start downloads");

NSString *urlpath = [NSString stringWithFormat:@"http://www.domain.com/ygp6bcckll8mw62.cm"];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlpath]];

AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:[NSString stringWithFormat:@"theprice.cm"]];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO];

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Successfully downloaded file to %@", path);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", error);
}];

[operation setDownloadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    NSLog(@"Sent %lld of %lld bytes, %@", totalBytesWritten, totalBytesExpectedToWrite, path);
}];

[operation start];

当我尝试访问文件内容时,正如人们所期望的那样:它是空的。

关于为什么不能正确下载自定义文件类型的任何想法?(.cm) 我是否遗漏了 AFNetworking 代码中的某些内容以使其行为异常?

4

2 回答 2

0

您确定outputStream正确冲洗和关闭了吗?AFHTTPRequestOperation一旦接收到所有数据,可能会将传输标记为成功完成,但不知道写入持久存储的任何特殊延迟和/或要求。

于 2013-04-21T02:10:36.397 回答
0

AFNetworking 不会向其输出流发送打开消息。close尽管如此,当它完成或发生错误时,它确实会向它发送一条消息。您可以尝试open在开始请求之前发送到输出流是否会有所帮助。

否则请注意,AFNetworking 不会从流中检查潜在的失败代码,并且不会保证所有接收到的字节都已完全写入流中。

于 2013-04-26T07:09:38.810 回答