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

 

posted @ 2015-12-15 18:06  YouNeedCourage  阅读(358)  评论(0编辑  收藏  举报