AFNetWorking的简单封装 图片音频 视频下载 上传 请求数据
来源:互联网 发布:有些源码上传会失败 编辑:程序博客网 时间:2024/05/13 04:06
第一步,继承AFNetWorking 最新的库
点击下载AFNetWorking第二步,新建一个类,我们称之为NetWorkTool,继承NSObject
请求方法
声明:
/** * 发送一个post请求 * * @param url 请求路径 * @param params 请求参数 * @param success 请求成功后的回调 * @param failure 请求失败后的回调 */ + (void)postWithURL:(NSString *)url params:(NSDictionary *)params success:(void(^)(id responseObject))success failure:(void(^)(NSError *error))failure;
实现:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"]; manager.requestSerializer = [AFHTTPRequestSerializer serializer]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; [manager POST:url parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { if (success) { NSData *data = [[NSData alloc]initWithData:[operation.responseString dataUsingEncoding:NSUTF8StringEncoding]]; id dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil]; success(dic); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { if (failure) { failure(error); } }];
上传图片
这里我们imageArr数组保存的应当是UIImage对象
声明:
+ (void)upLoadImageWithOption:(NSDictionary *)para withInferface:(NSString *)requestURL imageArr:(NSArray*)imageArr uploadSuccess:(void (^)(AFHTTPRequestOperation *, id))success uoloadFailure:(void (^)(AFHTTPRequestOperation *, NSError *))failure progress:(void (^)(float))progress
实现:
AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer]; NSMutableURLRequest *requset = [serializer multipartFormRequestWithMethod:@"POST" URLString:requestURL parameters:para constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { NSInteger i = 0;//此处循环是为了将UIImage对象进行压缩。可不处理直接转为二进制data即可。 for(UIImage *image in imageArr) { UIImage *newImage = [VTGeneralTool imageCompressForWidth:image targetWidth:640]; NSData *imageData = UIImagePNGRepresentation(newImage); [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"picfile%ld",(long)i] fileName:@"image.png" mimeType:@"image/jpeg"]; i++; } } error:nil]; AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; manager.responseSerializer = [AFHTTPResponseSerializer serializer]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; AFHTTPRequestOperation *operation = [manager HTTPRequestOperationWithRequest:requset success:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; success(operation,dict); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { failure(operation,error); }]; [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { CGFloat xx = totalBytesExpectedToWrite; CGFloat yy = totalBytesWritten; CGFloat pro = yy/xx; progress(pro); }]; [operation start];
音视频上传
方法类似图片上传,都是以文件流形式进行传输。
这里对视频上传进行了举列。音频上传不再累述。
声明:
+ (void)upLoadVideoWithOption:(NSDictionary *)para withInferface:(NSString *)requestURL videoPath:(NSURL *)videoURL uploadSuccess:(void (^)(AFHTTPRequestOperation * , id))success uoloadFailure:(void (^)(AFHTTPRequestOperation *, NSError *))failure progress:(void (^)(float))progress
实现:
//此处为对视频进行转码并且压缩为,最终输出为MP4的格式//输出后将文件保存到了/Library/Caches/文件夹内AVURLAsset *avAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil]; AVAssetExportSession *exportSession = [[AVAssetExportSession alloc]initWithAsset:avAsset presetName:AVAssetExportPresetMediumQuality]; NSDateFormatter* formater = [[NSDateFormatter alloc] init]; [formater setDateFormat:@"yyyy-MM-dd-HH:mm:ss"]; NSString *mp4Path = [NSHomeDirectory() stringByAppendingFormat:@"/Library/Caches/output-%@.mp4", [formater stringFromDate:[NSDate date]]]; exportSession.outputURL = [NSURL fileURLWithPath: mp4Path]; exportSession.outputFileType = AVFileTypeMPEG4; [exportSession exportAsynchronouslyWithCompletionHandler:^{ switch ([exportSession status]) { case AVAssetExportSessionStatusFailed: { UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"错误" message:[[exportSession error] localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; [alert show]; break; } case AVAssetExportSessionStatusCancelled: break; case AVAssetExportSessionStatusCompleted: { AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; //text/plain manager.responseSerializer = [AFHTTPResponseSerializer serializer]; manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"]; AFHTTPRequestOperation *opera = [manager POST:requestURL parameters:para constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { NSData *videoData = [NSData dataWithContentsOfFile:mp4Path]; [formData appendPartWithFileData:videoData name:@"video000" fileName:@"video000.mp4" mimeType:@"video/mpeg4"]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil]; success(operation,dict); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { failure (operation,error); }]; [opera setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { CGFloat xx = totalBytesExpectedToWrite; CGFloat yy = totalBytesWritten; CGFloat pro = yy/xx; progress(pro); }]; [opera start]; break; } default: break; } }];
文件下载
声明:
+ (void)downloadFileWithOption:(NSDictionary *)paramDic withInferface:(NSString*)requestURL savedPath:(NSString*)savedPath downloadSuccess:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success downloadFailure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure progress:(void (^)(float progress))progress
实现:
AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer]; NSMutableURLRequest *request =[serializer requestWithMethod:@"POST" URLString:requestURL parameters:paramDic error:nil]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc]initWithRequest:request]; [operation setOutputStream:[NSOutputStream outputStreamToFileAtPath:savedPath append:NO]]; [operation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { float p = (float)totalBytesRead / totalBytesExpectedToRead; progress(p); // NSLog(@"download:%f", (float)totalBytesRead / totalBytesExpectedToRead);//下载进度 }]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { success(operation,responseObject); NSLog(@"下载成功"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { success(operation,error); NSLog(@"下载失败"); }]; [operation start];
第三步:调用
^.^ 直接调用其他:
图片压缩的方法
+ (UIImage *) imageCompressForWidth:(UIImage *)sourceImage targetWidth:(CGFloat)defineWidth{ UIImage *newImage = nil; CGSize imageSize = sourceImage.size; CGFloat width = imageSize.width; CGFloat height = imageSize.height; CGFloat targetWidth = defineWidth; CGFloat targetHeight = height / (width / targetWidth); CGSize size = CGSizeMake(targetWidth, targetHeight); CGFloat scaleFactor = 0.0; CGFloat scaledWidth = targetWidth; CGFloat scaledHeight = targetHeight; CGPoint thumbnailPoint = CGPointMake(0.0, 0.0); if(CGSizeEqualToSize(imageSize, size) == NO){ CGFloat widthFactor = targetWidth / width; CGFloat heightFactor = targetHeight / height; if(widthFactor > heightFactor){ scaleFactor = widthFactor; } else{ scaleFactor = heightFactor; } scaledWidth = width * scaleFactor; scaledHeight = height * scaleFactor; if(widthFactor > heightFactor){ thumbnailPoint.y = (targetHeight - scaledHeight) * 0.5; }else if(widthFactor < heightFactor){ thumbnailPoint.x = (targetWidth - scaledWidth) * 0.5; } } UIGraphicsBeginImageContext(size); CGRect thumbnailRect = CGRectZero; thumbnailRect.origin = thumbnailPoint; thumbnailRect.size.width = scaledWidth; thumbnailRect.size.height = scaledHeight; [sourceImage drawInRect:thumbnailRect]; newImage = UIGraphicsGetImageFromCurrentImageContext(); if(newImage == nil){ NSLog(@"scale image fail"); } UIGraphicsEndImageContext(); return newImage;}
文/五阿哥永琪(简书作者)
原文链接:http://www.jianshu.com/p/2919c0ddda49
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
原文链接:http://www.jianshu.com/p/2919c0ddda49
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
0 0
- AFNetWorking的简单封装 图片音频 视频下载 上传 请求数据
- iOS: AFNetworking的简单封装和图片上传
- iOS 数据请求类AFNetworking 简单封装
- AFNetworking(get)请求数据,(post)上传图片
- AFNetworking(get)请求数据,(post)上传图片
- AFNetworking(get)请求数据,(post)上传图片
- AFNetWorking封装请求数据
- AFNetworking上传图片/视频
- AFNetworking上传图片视频
- 自己封装的afnetworking数据请求
- AFNetworking数据请求(深度封装)
- AFNetWorking的两个使用场景(请求网络数据、图片上传)
- AFNetworking的简单封装
- ASIFormDataRequest /AFNetworking GET/POST请求的简单封装(block)
- 简单的AFNetWorking用法:加载网络图片和请求JSON数据
- IOS中json字符串原生数据请求&IOS跨平台AES128字符串加解密&AFNetworking框架的简单封装使用
- 视频、音频、图片代理下载
- AFNetWorking 数据请求、数据上传、网络监控
- java枚举与及其switch的使用
- android studio 2.1.1 启动abd出错
- 推荐:程序员必读的期刊杂志
- 10066双塔
- 2016.08.11【初中部 NOIP提高组 】模拟赛C
- AFNetWorking的简单封装 图片音频 视频下载 上传 请求数据
- sublime&&Hbuilder扩展常用代码块
- UIWebView携带参数的POST请求
- 51MCU的中断系统
- UVA 439-Knight Moves
- 39. Combination Sum
- OJ------等差数列
- 深度学习算法实践9---用Theano实现多层前馈网络
- 矩阵元素相乘----搜狗2016研发工程师编程题