我在使用 AFNetworking 从 Rackspace 存储库下载文件时遇到了问题。
基本上有时文件没有完全传输,但 AFNetworking 会触发成功块。收到的 http 响应代码也设置为 200 OK。
这种情况只发生在 3G 连接上。在 WiFi 上,我们正确接收所有文件。
谁能给我们任何可能导致这种行为的提示?
编辑,2012-05-10 我检测到问题可能出在其他地方,我正在做的是检查文件的 CRC 并将其与预期的 CRC 进行比较。但是(仅当连接超过 3G 时才会发生)CRC 校验失败。下面是我用来下载文件然后检查它的 CRC 的一些代码片段:
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlNS];
AFImageRequestOperation * imageRequestOperation = [AFImageRequestOperation imageRequestOperationWithRequest:request
imageProcessingBlock:nil
cacheName: nil
success: ^(NSURLRequest * request, NSHTTPURLResponse * response, UIImage * image)
{
[self.class postProcessDownloadAfNetworking: request andResponse: response resultImage: image error: nil];
}
failure: ^(NSURLRequest * request, NSHTTPURLResponse * response, NSError * error)
{
[self.class postProcessDownloadAfNetworking: request andResponse: response resultImage: nil error: error];
}];
imageRequestOperation.outputStream = [NSOutputStream outputStreamToFileAtPath:obj.destinationFilename append:NO];
[imageRequestOperation start];
然后在回调方法中:
if(error == nil)
{
NSData * data = [NSData dataWithContentsOfFile:imgData.destinationFilename];
uint32_t fileCrcInt = [data crc32];
NSString * fileCrcHex = [NSString stringWithFormat:@"%2X", (int) fileCrcInt] ;
NSString * fileCrcHex2 = [NSString stringWithFormat:@"000000%@", fileCrcHex] ;
fileCrcHex2 = [fileCrcHex2 substringFromIndex:[fileCrcHex2 length]-8];
// Compare CRC
if( [expectedCRC isEqualToString:fileCrcHex2] )
{
(...)
指令 [NSData dataWithContentsOfFile:] 是否有可能在 AFNetworking 的输出流完全写入文件之前读取文件?也许我遇到了某种 iOS 磁盘缓存或类似的东西。