首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用AFHTTPClient下载图像

用AFHTTPClient下载图像
EN

Stack Overflow用户
提问于 2013-08-27 09:01:42
回答 2查看 349关注 0票数 0

我正在尝试使用AFNetworking从服务器下载jpeg文件。它似乎成功地访问了服务器,但是responseObject是空的。

以下是有关守则:

代码语言:javascript
复制
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,就可以轻松地拿回图片。用户名和密码是有效的,因为其他请求可以工作。

我需要改变什么,下载图像?

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-28 09:04:21

您正在告诉客户端使用JSON请求。JSON不是一个形象。

如果你想要NSData,那么你可以这么做.

代码语言:javascript
复制
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,那就更容易了.

代码语言:javascript
复制
[self.imgProfile setImageWithURL:[NSURL URLWithString:@"https://api.test.info/image/number1"]];

但不确定这是如何与授权一起工作的。

实际上,这就是该做的..。

代码语言:javascript
复制
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];
票数 0
EN

Stack Overflow用户

发布于 2013-08-28 12:28:01

我认为Fogmeister的解决方案也应该有效,因为他以NSData的方式处理每个请求。而不是注册AFHTTPOperationClasses。

我的解决方案:

  1. [自registerHTTPOperationClass:AFImageRequestOperation类];
  2. 确保您的URL使用扩展

这就是我的处境:

我有一个API,从它请求数据和图像,以访问数据和图像,我需要在标题中设置用户名和密码。最好的(只有?)实现这一目的的方法是对AFHTTPClient进行子类化,并在整个应用程序中将其作为单例使用。

对于我必须接收的JSON数据,一切都很好,但是几天前,我想请求这些图片。图片显然不是JSON-数据,但我还是尝试通过我的单例请求它们。

请求成功,但我的responseObject中没有数据。

第一件事,谷歌和阅读,堆栈溢出和阅读…没有多大帮助,因为我发现的可能性都是不使用身份验证的。

那我做了什么?

我尝试将类AFImageRequestOperation注册为HTTPOperationClass,用于HTTPOperationClass的HTTPClient。

代码语言:javascript
复制
[self registerHTTPOperationClass:[AFImageRequestOperation class]];

这没什么用,因为方法

代码语言:javascript
复制
+ (BOOL)canProcessRequest:(NSURLRequest *)urlRequest

AFImageRequestOperation只检查URL的扩展。

我拨打的URL没有任何分机。首先,我快速地定制了AFJSONRequestOperation,这样它也可以返回图像,比如NSData。只是为了检查其他一切是否正常。

现在我告诉我的同事稍微修改API,这样我就可以用后缀"jpg“来调用URL了。

现在一切都很好。

我只想在某个地方告诉你!以防有人遇到同样的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18461217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档