AFNetworking 2.xで画像アップロードと画像参照

iOS でサーバ通信する際、多くの iOS アプリで AFNetworking が利用されています。ここでは AFNetworking の AFHttpSessionManager を使って画像のアップロードと参照を行います。

画像アップロード

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFJSONResponseSerializer serializer];

NSURLSessionDataTask *dataTask = [manager POST: "リクエストURL"
parameters: @{"リクエストパラメータ"}
constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:UIImageJPEGRepresentation(image, 1.0)
name:@"file"
fileName:@"fileName"
mimeType:@"image/jpeg"];}
success:^(NSURLSessionDataTask *task, id responseObject) {
// 成功したときの処理
}
failure:^(NSURLSessionDataTask *task, NSError *erorr) {
// 失敗したときの処理
}];

画像をアップロードする際は constructingBodyWithBlock で画像データをサーバに渡します。ここでは jpeg の画像データをアップロードしています。サーバ側では name に指定したパラメータでデータを受け取ります。

画像参照

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.requestSerializer = [AFHTTPRequestSerializer serializer];
manager.responseSerializer = [AFImageResponseSerializer serializer];

NSURLSessionDataTask *dataTask = [manager GET: "リクエストURL"
parameters: @{"リクエストパラメータ"}
success:^(NSURLSessionDataTask *task, UIImage *image) {
// 成功したときの処理
}
failure:^(NSURLSessionDataTask *task, NSError *erorr) {
// 失敗したときの処理
}];

画像参照時のリクエストは基本通常のリクエスト時と変わりませんが、responseSerialiser を AFImageResponseSerializer で指定します。これによってレスポンスオブジェクトを Image で受け取ることができます。