我正在尝试使用AFNetworking从服务器下载jpeg文件。它似乎成功地访问了服务器,但是responseObject是空的。
以下是有关守则:
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:"https://api.test.info/"];
[client registerHTTPOperationClass:[AFJSONRequestOperation class]];
[client setDefaultHeader:@"Accept" value:@"application/json"];
[client setParameterEncoding:AFJSONParameterEncoding];
[client setAuthorizationHeaderWithUsername:@"username" password:@"password"];
[AFJSONRequestOperation addAcceptableContentTypes:[NSSet setWithObject:@"image/jpeg"]];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
[client getPath:@"image/number1" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject){
NSData *test = responseObject;
NSLog(@"%@", responseObject);
NSLog(@"%@", test);
[self.imgProfile setImage:[UIImage imageWithData:test]];
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];此代码的输出为:(null) (null)
这意味着responseObject和test是空对象。如果我在浏览器中使用相同的URL,就可以轻松地拿回图片。用户名和密码是有效的,因为其他请求可以工作。
我需要改变什么,下载图像?
任何帮助都是非常感谢的。
发布于 2013-08-28 09:04:21
您正在告诉客户端使用JSON请求。JSON不是一个形象。
如果你想要NSData,那么你可以这么做.
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:"https://api.test.info/"];
[client setAuthorizationHeaderWithUsername:@"username" password:@"password"];
[[AFNetworkActivityIndicatorManager sharedManager] setEnabled:YES];
[client getPath:@"image/number1" parameters:nil success:^(AFHTTPRequestOperation *operation, NSData responseObject){
[self.imgProfile setImage:[UIImage imageWithData:responseObject]];
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@", error);
}];或者,如果self.imgProfile是UIImageView,那就更容易了.
[self.imgProfile setImageWithURL:[NSURL URLWithString:@"https://api.test.info/image/number1"]];但不确定这是如何与授权一起工作的。
实际上,这就是该做的..。
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:"https://api.test.info/"];
[client setAuthorizationHeaderWithUsername:@"username" password:@"password"];
NSURLRequest *request = [client requestWithMethod:@"GET" path:@"image/number1" parameters:nil];
[self.imgProfile setImageWithURLRequest:request placeholderImage:nil success:nil failure:nil];发布于 2013-08-28 12:28:01
我认为Fogmeister的解决方案也应该有效,因为他以NSData的方式处理每个请求。而不是注册AFHTTPOperationClasses。
我的解决方案:
这就是我的处境:
我有一个API,从它请求数据和图像,以访问数据和图像,我需要在标题中设置用户名和密码。最好的(只有?)实现这一目的的方法是对AFHTTPClient进行子类化,并在整个应用程序中将其作为单例使用。
对于我必须接收的JSON数据,一切都很好,但是几天前,我想请求这些图片。图片显然不是JSON-数据,但我还是尝试通过我的单例请求它们。
请求成功,但我的responseObject中没有数据。
第一件事,谷歌和阅读,堆栈溢出和阅读…没有多大帮助,因为我发现的可能性都是不使用身份验证的。
那我做了什么?
我尝试将类AFImageRequestOperation注册为HTTPOperationClass,用于HTTPOperationClass的HTTPClient。
[self registerHTTPOperationClass:[AFImageRequestOperation class]];这没什么用,因为方法
+ (BOOL)canProcessRequest:(NSURLRequest *)urlRequestAFImageRequestOperation只检查URL的扩展。
我拨打的URL没有任何分机。首先,我快速地定制了AFJSONRequestOperation,这样它也可以返回图像,比如NSData。只是为了检查其他一切是否正常。
现在我告诉我的同事稍微修改API,这样我就可以用后缀"jpg“来调用URL了。
现在一切都很好。
我只想在某个地方告诉你!以防有人遇到同样的问题。
https://stackoverflow.com/questions/18461217
复制相似问题