何时是使用ASIHTTPRequest在请求图像期间收到的响应代码?

时间:2011-05-16 11:48:53

标签: iphone http protocols

我什么时候才能获得有效图像请求的响应代码200?是在将所有数据下载到我的浏览器或者哪个设备正在请求图像之后?

我正在使用库http://allseeing-i.com/ASIHTTPRequest/在我的iPad应用中下载图像并直接使用下载到文件选项,然后删除文件,如果它是404错误或任何其他状态代码而不是200。

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.jpg"];

问题是部分响应似乎在慢速连接期间被保存,所以我最终得到空白或损坏的图像。

我决定只在收到状态代码200后才将数据流保存到磁盘:

NSURL *url = [NSURL URLWithString: [[NSString stringWithFormat:kProductImagesURL, fileName] stringByAppendingString:tStamp]];
ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setTimeOutSeconds:10];
[request startSynchronous];

int statusCode = [request responseStatusCode];
 if (statusCode==200) {
     NSData *responseData = [request responseData];
     [responseData writeToFile:[savePath stringByReplacingOccurrencesOfString:@"%20" withString:@" "] atomically:YES];
    }

我只想确保响应代码仅在请求完成并且所有数据都已下载后才会返回。我99%肯定是这种情况,但无法承受另一个应用程序版本,其中包含像这样的图像错误。

1 个答案:

答案 0 :(得分:1)

您应该考虑切换到异步请求有两个原因。首先,它释放你的主线程与用户交互(即使模态微调器会很好 - 否则看起来你的应用程序已经冻结)。

其次,它为您提供仅在整个请求完成后才会发生的回调。我无法解释只是用您展示的代码获得了部分数据,但我从来没有使用ASI的异步方法遇到过这个问题。