//
// 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