我正在尝试从具有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);
}];
此代码的输出是: (空值) (空)
这意味着responseObject和test是空对象。 如果我在浏览器中使用相同的URL,我可以轻松地恢复图片。 用户名和密码有效,因为其他请求有效。
我需要更改哪些内容才能下载图片?
感谢任何帮助。
答案 0 :(得分:0)
您告诉客户端使用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];
答案 1 :(得分:0)
我认为Fogmeister的解决方案也应该有效,因为他处理每个请求都是NSData。而不是注册AFHTTPOperationClasses。
[self registerHTTPOperationClass:[AFImageRequestOperation class]];
请确保您的网址使用附加信息。
这是我的情况:
我有一个API,我可以从中请求数据和图像,以便访问数据和图像,我需要在标题中设置用户名和密码。最好(唯一?)方法是通过继承AFHTTPClient并在整个应用程序中将其用作单例。
我必须收到的JSON数据一切正常,但几天前我想要请求图片。好的图片显然不是JSON-Data,但是我试图通过我的单身人士请求它们。
请求成功,但我的responseObject中没有数据。
首先,谷歌和阅读,stackoverflow和阅读...不是真的有用,因为我发现的可能性都没有使用身份验证。
那我该怎么办?
我尝试将AFImageRequestOperation类注册为HTTPClient的HTTPOperationClass。
[self registerHTTPOperationClass:[AFImageRequestOperation class]];
这没有帮助,因为方法
+ (BOOL)canProcessRequest:(NSURLRequest *)urlRequest
AFImageRequestOperation的仅检查网址的扩展名。
我正在调用的URL没有任何扩展名。 首先,我快速定制AFJSONRequestOperation,以便它也可以返回图像,如NSData。只是为了检查其他一切是否正常。
现在我告诉我的同事稍微更改API,以便我可以使用后缀“jpg”调用URL。
现在一切正常。
只想告诉某个地方!如果有人遇到同样的问题。