最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
iOS上传语音到服务器的实例
时间:2022-06-25 23:35:08 编辑:袖梨 来源:一聚教程网
iOS上传语音到服务器,这里介绍用AFN上传语音文件到服务端。
语音转NSData
如果不是NSData就要想办法把语音文件转化为NSData,然后才能上传服务器。首先我们拿到语音文件对应的NSData对象
NSData *voiceData = [message valueForKey:@"wavAudioData"];
上传代码
代码如下 | 复制代码 |
//kHostURL为开发者公司的APP对应的主域名,比如http://xxx.yyy.cn AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:kHostURL]]; manager.requestSerializer.timeoutInterval = 100; NSMutableDictionary *paras = [[NSMutableDictionary alloc]init]; [paras setValue:self.msgType forKey:@"msgType"]; //以file的形式上传,这里的key很重要"accessory",这个是和服务器端对应的,千万不能乱写,一定要看接口文档,不然会上传失败 [paras setValue:(__bridge id)((__bridge FILE *)(voiceData)) forKey:@"accessory"]; [paras setValue:[BLLUser getPushToken] forKey:@"senderPushToken"]; [paras setValue:self.receiverPushToken forKey:@"receiverPushToken"]; [paras setObject:[Base getKey] forKey:@"ukey"]; AFHTTPRequestOperation * operation = [manager POST:kBLLUrl_Chat_Chat parameters:paras constructingBodyWithBlock:^(id NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyyMMddHHmmss"; NSString *str = [formatter stringFromDate:[NSDate date]]; //fileName这里取当前时间戳 //accessory还是一样和服务端对应,具体看你自己的接口文档 //mimeType选择@"amr/mp3/wmr",意思是告诉服务端,我上传的文件类型是支持三种格式amr、mp3和wmr,这里需要注意 //这里我是上传了一个amr格式的语音文件,那么如果你的语音文件为其它格式,一定要和服务端对应上,比如服务端让你上传wav格式的语音,那么你拿到的是amr,怎么办?讲个笑话,有人直接改后缀,服务端不是让我上传wav的嘛,直接改.wav不就可以了嘛!真的有人这样想这样做了。那么这里告诉你,你是男的,穿了女人的衣服,你仍然是男的。即使割掉丁丁也不是女的,最多算是不男不女。解决方法就是找第三方库,把你的amr语音转换为wav,然后转为NSData再上传就可以了。 NSString *fileName = [NSString stringWithFormat:@"%@.amr", str]; [formData appendPartWithFileData:voiceData name:@"accessory" fileName:fileName mimeType:@"amr/mp3/wmr"]; } success:^(AFHTTPRequestOperation *operation, NSData * responseObject) { NSLog(@"回调成功!"); NSError * error; NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingAllowFragments error:&error]; //json解析得到存储服务器返回的字典 NSLog(@"状态==%@",dic[@"msg"]); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { //连接服务器失败 NSLog(@"发送失败"); }]; operation.responseSerializer = [AFHTTPResponseSerializer serializer]; [operation start]; |
代码可以直接copy,改baseURL和路径,已经上传的关键参数。就可以上传成功。
相关文章
- 王者荣耀侦探能力大测试攻略 王者荣耀侦探能力大测试怎么过 11-22
- 无期迷途主线前瞻兑换码是什么 11-22
- 原神欧洛伦怎么培养 11-22
- 炉石传说网易云音乐联动怎么玩 11-22
- 永劫无间手游确幸转盘怎么样 11-22
- 无期迷途主线前瞻兑换码是什么 无期迷途主线前瞻直播兑换码介绍 11-22