iOS上传语音、文字、图片
2016-05-06 14:23
411 查看
需求:用户可能提交 文字,也可能有语音,还有可能有图片。当然 都有也是可以的。 在这里我的方案是 先做判断(因为我提交的类不同(也就是方法不一样));
(1)if (_imageArray.count == 0 && recordingInterval == 0){ //只有文字 }else{ // 文字 图片 加录音 }
方法:
// 有文字,有图,片有语音 +(void)askTextImageByUserInfoId:(NSString *)userInfoId WithUserRelationId:(NSString *)userRelationId WithAskContent:(NSString *)askContent WithImageDataArray:(NSMutableArray *)imageDataArray WithVoiceData:(NSData *)voiceData success:(void (^)(id askDescArray))success failure:(void (^)(NSError *error))failure`
具体实现:
/** * 请求Opinion Server Api 接口方法 * * @param request 自定义的Request请求 * @param userInfoId 对应人的唯一标示(用户本人 和 关系人) * @param token token值 * @param imageAndVoiceDataArray 盛放图片 语音的数组 * @param success 请求成功,返回Response对象 * @param failure 请求失败 * @param cached 是否进行缓存 */ + (void)requestWithPOST:(NetWorkBaseRequest *)request WithImageDataArray:(NSMutableArray *)imageDataArray WithVoiceData:(NSData *)voiceData success:(void (^)(NetWorkBaseResponse *responseObject))success failure:(void (^)(NSError *error))failure cache:(BOOL)cached { if (!request) { NSLog(@"[ERROR] request cannot be NULL"); if (failure) { failure([NSError errorWithDomain:@"" code:-1 userInfo:nil]); } return; } AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager.requestSerializer setValue:@"multipart/form-data;charset=utf-8"forHTTPHeaderField:@"Content-Type"]; manager.requestSerializer.timeoutInterval = 10; manager.responseSerializer = [AFJSONResponseSerializer serializer]; [manager.requestSerializer setCachePolicy:NSURLRequestReturnCacheDataElseLoad]; NSString *tokenValue = [SSKeychain passwordForService:[AppUtils appServiceName] account:[AppUtils tokenKey]]; if (!tokenValue) { tokenValue = @""; }else{ [request.paramDic setValue:tokenValue forKey:@"token"]; } [manager POST:request.stringOfApiURLString parameters:request.paramDic constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) { //对传进来的 图片 数组进行遍历 for (int i = 0; i < imageDataArray.count; i++) { NSData *imgData = imageDataArray[i]; //用这个当图片的名字,一起到图片名不重复的效果 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSString *tupianming = [NSString stringWithFormat:@"yyyyMMddHHmmssSSSS%d",i]; [dateFormatter setDateFormat:tupianming]; NSString *pictname; NSString *picFileName; pictname = [NSString stringWithFormat:@"/%@.jpg",[dateFormatter stringFromDate:[NSDate date]]]; picFileName = [NSString stringWithFormat:@"/%@file",[dateFormatter stringFromDate:[NSDate date]]]; [formData appendPartWithFileData:imgData name:picFileName fileName:[NSString stringWithFormat:@"%@",pictname] mimeType:@"image/jpg"]; } if(voiceData!=nil){ //用这个当图片的名字,起到图片名不重复的效果 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; NSString *tupianming = [NSString stringWithFormat:@"yyyyMMddHHmmssSSSS%@",@"luyin"]; [dateFormatter setDateFormat:tupianming]; NSString *luyinname; NSString *luyinFileName; luyinname = [NSString stringWithFormat:@"/%@.amr",[dateFormatter stringFromDate:[NSDate date]]]; //让服务器识别这个音频的格式 为 amr luyinFileName = [NSString stringWithFormat:@"/%@.amr",[dateFormatter stringFromDate:[NSDate date]]]; [formData appendPartWithFileData:voiceData name:luyinname fileName:luyinFileName mimeType:@"audio/amr"]; } } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { NSDictionary *dic = responseObject;//operation.request.cachePolicy if (dic){ @try{ //解决若是json格式出错崩溃问题,判断status=0为成功 NSString *responseClassName = [NetWorkUtil replaceCharacter:@"Request" withString:@"Response" inString:NSStringFromClass([request class])]; NetWorkBaseResponse *response = [[NSClassFromString(responseClassName) alloc] initWithDictionary:dic]; if (response && success) { success(response); }else{ failure([NSError errorWithDomain:@"接口出错" code:-1 userInfo:nil]); } }@catch(NSException *exception) { failure([NSError errorWithDomain:@"接口返回数据格式出错" code:-1 userInfo:nil]); } } else if (failure){ failure([NSError errorWithDomain:@"接口出错" code:-1 userInfo:nil]); }else{ NSLog(@"[ERROR] failure not exist!"); } } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { failure(error); }]; }
相关文章推荐
- iOS 沙盒机制
- iOS 中的可遍数组NSMutableArray
- iOS开发系列-线程问题
- IOS开发: NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]
- 如何用 Instruments 检测 iOS 每个进程的电量消耗?
- iOS滑动解锁、滑动获取验证码效果的实现代码
- iOS自动处理键盘事件的第三方库:IQKeyboardManager
- iOS的几种后台机制
- IOS CopyPNGFile 异常问题解决
- iOS开发系列-动画绘图CALayer
- iOS 关于已配对设备重新检测连接问题
- iOS开发系列--打造自己的“美图秀秀”
- iOS开发-进阶:语言国际化及代码切换语言
- iOS开发_修改系统cell的图像会变模糊的处理
- iOS开发系列--触摸事件、手势识别、摇晃事件、耳机线控
- IOS应用内存释放机制
- iOS 日期转成几年月日时分秒前
- iOS 日期格式转几年几月几日几时几分几秒前
- iOS---使用MJExtension 归档
- iOS端播放VR图片