基于AFN框架的多图上传
来源:互联网 发布:生意参谋数据解读 编辑:程序博客网 时间:2024/06/05 21:13
多图上传,有很多方法.此方法基于AFN中AFHTTPSessionManager实现的多图上传
.h文件声明
/**
* 多图上传
*
* @param url 链接地址
* @param parameters 表单参数
* @param imageArray 图片数组UIImage
* @param imageArrayName 数组名称
* @param compressionQuality 压缩比例
* @param success 成功回调
* @param failure 失败回调
*
* @return NSURLSessionDataTask
*/
+ (NSURLSessionDataTask *)postMultipartImageWithURL:(NSString *)url
parameters:(id)parameters
imageArray:(NSArray *)imageArray
imageArrayName:(NSString *)imageArrayName
compressionQuality:(CGFloat)radio
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure;
.m实现文件
+ (NSURLSessionDataTask *)postMultipartImageWithURL:(NSString *)url
parameters:(id)parameters
imageArray:(NSArray *)imageArray
imageArrayName:(NSString *)imageArrayName
compressionQuality:(CGFloat)radio
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure {
for (int i =0; i < imageArray.count;i++) {
if (![imageArray[i]isKindOfClass:[UIImageclass]]) {
NSLog(@"请检查是否都是UIImage");
returnnil;
}
}
return [[AFAppDotNetAPIClientsharedClient]POST:urlparameters:parametersconstructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
int index =0;
//为每个图片生成名称
for (UIImage *imagein imageArray) {
NSDate *date = [NSDatedate];
NSDateFormatter *formatter = [[NSDateFormatteralloc]init];
formatter.dateFormat =@"yyyy-MM-dd";
NSString *dateStr = [formatterstringFromDate:date];
NSString *fileName = [NSStringstringWithFormat:@"%@%d.png",dateStr,index];
NSData *imageData = radio ==1.0f ?UIImageJPEGRepresentation(image,1.0f) :UIImageJPEGRepresentation(image, radio);;
[formData appendPartWithFileData:imageDataname:imageArrayNamefileName:fileNamemimeType:@"image/png/jpg"];
index ++;
}
} progress:^(NSProgress *_Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {
success(responseObject);
} failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {
failure(error);
}];
}
注:其中AFAppDotNetAPIClient 为基于AFHTTPSessionManager的单例方法
具体实现如下:
staticNSString *const AFAppDotNetAPIBaseURLString = 公共部分;
+ (instancetype)sharedClient {
staticAFAppDotNetAPIClient *_sharedClient =nil;
staticdispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
;
_sharedClient = [[AFAppDotNetAPIClientalloc]initWithBaseURL:[NSURLURLWithString:AFAppDotNetAPIBaseURLString]];
_sharedClient.securityPolicy = [AFSecurityPolicypolicyWithPinningMode:AFSSLPinningModeNone];
// 数据下载完成,数据为JSON
_sharedClient.responseSerializer = [AFJSONResponseSerializerserializer];
// 数据为XML
// <NSXMLParser: 0x7f9ef5a4d240>
// _sharedClient.responseSerializer = [AFHTTPResponseSerializer serializer];
// 数据为PLIST
// _sharedClient.responseSerializer = [AFPropertyListResponseSerializer serializer];
// _sharedClient.responseSerializer = [AFXMLDocumentResponseSerializer serializer];
// AFHTTPResponseSerializer 返回原生的数据
// AFJSONResponseSerializer 数组或者是字典
// AFXMLParserResponseSerializer NSXMLParser对象
_sharedClient.responseSerializer.acceptableContentTypes=[NSSetsetWithObjects:@"application/json",@"text/json",@"text/javascript",@"text/html",@"text/plain",nil];
});
return _sharedClient;
}
更多详情请看https://github.com/Ysiqian/AFNetworkRequest 基于AFN3.X的二次封装网络请求 支持POST GET 单图多图上传.可以在项目中直接用.觉得可以,各位看官可以star一下哦.谢谢.
有不对的地方请多多指出.谢谢!
- 基于AFN框架的多图上传
- ios 基于AFN的图片上传
- AFN框架上传录音文件。
- iOS 使用AFN 进行单图和多图上传
- iOS 使用AFN 进行单图和多图上传
- 基于AFN 3.0 封装(包括图片与视频的表单上传)
- 记录:AFN第三方框架,上传文件的子文件夹也需要打开读写权限。
- AFN网络框架2.x版—文件上传
- ios 基于AFN的二次封装
- 利用AFN进行多图片上传
- AFN上传多张图片到服务器
- 使用AFN多张图片上传
- AFN上传多张图片到服务器
- 基于SSM框架的多文件上传Controller类编写
- 对AFN框架的一层封装
- AFN网络框架(session的简单示例)
- 基于struts框架的文件上传
- 基于ssh框架的文件上传功能
- "网卡eth0,未识别的端口"的解决方法
- 红黑联盟 dos批处理延时技术
- 292. Nim Game
- 冒泡排序及算法优化
- linux ifconfig命令参数及用法详解--linux查看配置网卡命令
- 基于AFN框架的多图上传
- iOS 空间旋转
- 交叉编译GDB和GDBserver(mipsel版)
- 大型分布式网站架构技术总结
- 各种注意事项
- 连续子数组最大和问题(扫描法改进)
- 【郑轻-oj】-1048: 阶乘表(对数用math,只有log,没有ln)
- oracle针对oracle和grid用户---环境变量设置---单实例和RAC
- Jmeter工具接口自动化使用