【问题标题】:AFNetworking AFHTTPClient ClassAFNetworking AFHTTPClient 类
【发布时间】:2013-10-21 19:07:14
【问题描述】:

我对 iOS 编程还很陌生,尤其是在 Web 服务方面。我正在开发一个用于学术目的的应用程序,我需要与我的服务器通信,目前使用 AFNetworking2 和 Restler/php,在 GET 方法方面一切正常。但我不能上传任何东西。

已经阅读了几个小时,在 github 支持站点、stackoverflow 中,几乎所有上传图片的示例/问题(还有很多)都使用这一行:

AFHTTPClient *client = [AFHTTPClient clientWithBaseURL:[NSURL URLWithString:@"http://server"]]; 

我的 sharedClient 确实有一个 Client 类,AFHTTPSessionManager 的子类。但是所有的例子都使用这个 AFHTTPClient 和 initWithURL 以及其他我找不到的类,比如 AFJSONRequestOperation。

主要是说我应该创建一个单例,AFHTTPClient 的子类,但我在任何地方都找不到它。有些链接甚至将我发送到官方 github 存储库,但它不再可用。 所以我的问题是,我在哪里可以获得有关 AFHTTPClient 的更多信息,我应该使用它吗,谁能给我一个关于如何创建一个或至少了解它的功能的教程。

干杯

【问题讨论】:

  • 您需要跟踪进度吗?
  • 不,不是。上传成功后我只需要一些反馈。

标签: iphone ios image-uploading restler afnetworking-2


【解决方案1】:

在 AFNetworking 2.0 中,AFHTTPClient 已被 AFHTTPRequestOperationManager / AFHTTPSessionManager 取代。我建议您参考example in git by them。 Git 克隆并在 XCode 中打开。它应该可以帮助你。那有最新的例子。

如果您想使用 AFHTTPClient 即 1.x 代码。这是git link to the branch。吊舱规格将是

pod 'AFNetworking', '~> 1.3.3'

在 2.0 AFNetworking 中,您可以像这样创建单例客户端。

界面

@interface AFAppDotNetAPIClient : AFHTTPSessionManager

+ (instancetype)sharedClient;

@end

实施

#import "AFAppDotNetAPIClient.h"

static NSString * const AFAppDotNetAPIBaseURLString = @"https://alpha-api.app.net/";

@implementation AFAppDotNetAPIClient

+ (instancetype)sharedClient {
    static AFAppDotNetAPIClient *_sharedClient = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _sharedClient = [[AFAppDotNetAPIClient alloc] initWithBaseURL:[NSURL URLWithString:AFAppDotNetAPIBaseURLString]];
        [_sharedClient setSecurityPolicy:[AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey]];
    });

    return _sharedClient;
}

@end

【讨论】:

  • 我确实检查了他们的示例,它非常有帮助,但它没有任何上传方法,只有 GET。这就是您可以使用您的示例访问的内容,我设法完成的那部分并且运行良好......我开始认为降级是唯一的选择。
  • @Bruno 检查这个example
  • 在服务器端抓取图片仍然有一些问题,但至少我设法上传了一些东西,以及该代码的修改版本,谢谢!
  • 它不适用于图像文件,它总是得到一个错误,说实体太大。我正在尝试找到一种解决方法,如果有人使用该代码,我会标记为已回答。
  • 所以你得到了一个 HTTP 413。我猜这个请求比服务器可以处理的大。看看你是否可以上传一个非常小的图像。如果可以,那么您需要更改服务器代码。
【解决方案2】:

AFHTTPClient 是来自 AFNetworking 1.x 的类 -- https://github.com/AFNetworking/AFNetworking/tree/1.x

AFNetworking 2.0 是一个相当新的库,所以没有太多关于它的教程,现在你仍然可以使用第一个版本,直到你觉得有时间学习 2.x))

希望有帮助

【讨论】:

  • 谢谢伙计,我正在使用一个教程......以及它与这个版本一起工作的一切;)
【解决方案3】:

这是解决方案,已针对最新版本的 AFNetworking 进行了修改。

//sample PNG
NSData *imageData = UIImagePNGRepresentation([UIImage imageNamed:@"700k_image.png"]);
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager POST:WEBSERVICE_IMAGEM_UPLOAD parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            [formData appendPartWithFileData:imageData name:@"image" fileName:@"image_name" mimeType:@"image/png"];
             } success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"Success: %@", responseObject);
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"Error: %@", error);
        }];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 2014-01-14
    • 2014-01-18
    • 1970-01-01
    • 2014-03-06
    • 2012-12-09
    相关资源
    最近更新 更多