一.文件上传(图片,音频,视频,文本等)(不带进度)
/** * 文件上传 导入 #import "AFNetworking.h" * @param filePath 上传文件本地路径 */ -(void)uploadfile:(NSString *)filePath { //服务器所需参数(根据服务器需要设置) 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:filePath]; //文件类型 if (!mimeType) { mimeType = @"application/octet-stream"; //不知道文件类型 } AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager]; requestManager.responseSerializer = [AFHTTPResponseSerializer serializer];//这个有时必须设置 requestManager.requestSerializer.timeoutInterval=45.f;//请求超时45S [requestManager POST:@"http://218.107.2.205:8080/mage/upload/file/save?" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:fileData name:@"file" fileName:fileName mimeType:mimeType]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { //系统自带JSON解析 NSDictionary *resultJsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableLeaves error:nil]; NSLog(@"上传成功resultJsonDic-%@",resultJsonDic); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"上传失败Error-%@",error); }]; }
二.文件上传(带上传进度)
/** * 功能 AFNetWorking带进度指示文件上传 * @param filePath 文件路径 */ -(void)uploadfile:(NSString *)filePath { //服务器所需参数(非必须) 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:filePath]; //文件类型 if (!mimeType) { mimeType = @"application/octet-stream"; } AFHTTPRequestOperationManager *requestManager = [AFHTTPRequestOperationManager manager]; requestManager.responseSerializer = [AFHTTPResponseSerializer serializer]; requestManager.requestSerializer.timeoutInterval=15.f;//请求超时45S NSMutableURLRequest *request = [requestManager.requestSerializer multipartFormRequestWithMethod:@"POST" URLString:SBUploadFileurl parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:fileData name:@"file" fileName:fileName mimeType:mimeType]; } error:nil]; AFHTTPRequestOperation *operation = [requestManager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { // //系统自带JSON解析 NSDictionary *resultJsonDic = [NSJSONSerialization JSONObjectWithData:operation.responseData options:NSJSONReadingMutableLeaves error:nil]; NSLog(@"上传成功--%@",resultJsonDic); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"失败--%@",error); }]; [operation setUploadProgressBlock: ^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { float progress=(float)totalBytesWritten / totalBytesExpectedToWrite; NSLog(@"上传进度 = %f",progress); }]; [request setTimeoutInterval:25.0f]; [requestManager.operationQueue addOperation:operation]; }
获取上传文件类型
http://tool.oschina.net/commons 上传文件类型mimeType对照表
/** * 功能 获取文件类型 方式一 * @param path 文件路径 * @return MIMEType */ -(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]; } /** * 获取MIMEType方式二 */ - (NSString*) getMIMEType2: (NSString *) path { if (![[NSFileManager defaultManager] fileExistsAtPath:path]) { return nil; } // Borrowed from http://stackoverflow.com/questions/5996797/determine-mime-type-of-nsdata-loaded-from-a-file // itself, derived from http://stackoverflow.com/questions/2439020/wheres-the-iphone-mime-type-database CFStringRef UTI = UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)[path pathExtension], NULL); CFStringRef mimeType = UTTypeCopyPreferredTagWithClass (UTI, kUTTagClassMIMEType); CFRelease(UTI); if (!mimeType) { return @"application/octet-stream"; } return (__bridge NSString *)mimeType; }