AFNetworking的二次封装
// // LPAFRequest.h // loopdiner // // Created by yl on 15/11/23. // Copyright © 2015年 yl. All rights reserved. // #import <Foundation/Foundation.h> @class AFHTTPRequestOperation; typedef void(^successBlock)(AFHTTPRequestOperation *operation,id responseObject); typedef void(^failedBlock)(AFHTTPRequestOperation *operation,NSError *error); @interface LPAFRequest : NSObject + (LPAFRequest *)sharedRequest; - (void)postRequestWithTableName:(NSString *)tableName operation:(NSString *)operation parameter:(id)parameter successBlock:(successBlock)sBlock failedBlock:(failedBlock)fBlock; - (void)uploadFileWittFilePath:(NSString *)filePath successBlock:(successBlock)sBlock failedBlock:(failedBlock)fBlock;//上传录音等文件 - (void)uploadFileWithTableName:(NSString *)tableName operation:(NSString *)operation images:(NSArray *)images fileName:(NSString *)fileName successBlock:(successBlock)sBlock failedBlock:(failedBlock)fBlock; @end
// // LPAFRequest.m // loopdiner // // Created by yl on 15/11/23. // Copyright © 2015年 yl. All rights reserved. // #import "LPAFRequest.h" #import "AFNetworking.h" @interface LPAFRequest() { AFHTTPRequestOperationManager *_manager; } @end @implementation LPAFRequest + (LPAFRequest *)sharedRequest { static LPAFRequest *request = nil; @synchronized(self) { if (request == nil) { request = [[LPAFRequest alloc] init]; } } return request; } - (void)postRequestWithTableName:(NSString *)tableName operation:(NSString *)operation parameter:(id)parameter successBlock:(successBlock)sBlock failedBlock:(failedBlock)fBlock { _manager = [AFHTTPRequestOperationManager manager]; //申明返回的结果是json类型 _manager.responseSerializer = [AFJSONResponseSerializer serializer]; //申明请求的数据是json类型 _manager.requestSerializer=[AFJSONRequestSerializer serializer]; //如果报接受类型不一致请替换一致text/html或别的 _manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; NSString *urlString = [NSString stringWithFormat:@"%@/%@/%@",Url_Header,tableName,operation]; NSLog(@"请求地址是:%@",urlString); [_manager POST:urlString parameters:parameter success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) { if (sBlock) { sBlock(operation,responseObject); } NSLog(@"返回的结果是%@",responseObject); } failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) { if (fBlock) { fBlock(operation,error); } NSLog(@"数据返回错误%@",error); }]; } - (void)uploadFileWithTableName:(NSString *)tableName operation:(NSString *)operation images:(NSArray *)images fileName:(NSString *)fileName successBlock:(successBlock)sBlock failedBlock:(failedBlock)fBlock{ //NSLog(@"图片的二进制数据是 %@",imgData); AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //申明返回的结果是json类型 manager.responseSerializer = [AFJSONResponseSerializer serializer]; //申明请求的数据是json类型 manager.requestSerializer=[AFJSONRequestSerializer serializer]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; NSString *urlString = [NSString stringWithFormat:@"%@/%@/%@",Url_Header,tableName,operation]; [manager POST:urlString parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; // formatter.dateFormat = @"yyyyMMddHHmmss"; // NSString *str = [formatter stringFromDate:[NSDate date]]; // NSString *fileName = [NSString stringWithFormat:@"%@", str]; // NSData *imageData = [NSData dataWithContentsOfFile:imagePath]; for (int i = 0; i < images.count; i++) { NSData *imageData = UIImageJPEGRepresentation(images[i], 0.5); // 上传图片,以文件流的格式 [formData appendPartWithFileData:imageData name:@"myfiles" fileName:[NSString stringWithFormat:@"%@.jpeg",fileName] mimeType:@"image/jpeg"]; } } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"上传成功%@",responseObject); if (sBlock) { sBlock(operation,responseObject); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"上传失败"); NSLog(@"%@",error); if (fBlock) { fBlock(operation,error); } }]; } - (void)uploadFileWittFilePath:(NSString *)filePath successBlock:(successBlock)sBlock failedBlock:(failedBlock)fBlock{ //服务器所需参数(根据服务器需要设置) //NSMutableDictionary *params=[NSMutableDictionary dictionary]; // [params setObject:@"0" forKey:@"uptype"]; //0-表单上传 1-字节流上传 // [params setObject:@"VEJQemdPdDd6ZEdhYWY1" forKey:@"key"]; NSData *fileData=[NSData dataWithContentsOfFile:filePath]; //二进制数据 NSString *fileName=[filePath lastPathComponent]; //文件名 // NSString *mimeType=[self getMIMEType:imagePath]; //文件类型 NSString *mimeType=[self getMIMEType:filePath]; //文件类型 if (!mimeType) { mimeType = @"application/octet-stream"; //不知道文件类型 } AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager]; requestManager.responseSerializer = [AFJSONResponseSerializer serializer];//这个有时必须设置 requestManager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; requestManager.requestSerializer.timeoutInterval=45.f;//请求超时45S [requestManager POST:[NSString stringWithFormat:@"%@/image/upvoc/uid/24",Url_Header] parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:fileData name:@"myfiles" fileName:fileName mimeType:mimeType]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { //系统自带JSON解析 NSDictionary *resultJsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableLeaves error:nil]; NSLog(@"上传成功resultJsonDic-%@",resultJsonDic); if (sBlock) { sBlock(operation,responseObject); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"上传失败Error-%@",error); if (fBlock) { fBlock(operation,error); } }]; } - (NSString*)getMIMEType:(NSString *)path { NSError *error; NSURLResponse*response; NSURLRequest*request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:path]]; [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; return [response MIMEType]; } @end