转载

iOS上传语音到服务器

iOS上传语音到服务器,这里介绍用AFN上传语音文件到服务端。

iOS上传语音到服务器

语音转NSData

如果不是NSData就要想办法把语音文件转化为NSData,然后才能上传服务器。首先我们拿到语音文件对应的NSData对象

 
NSData *voiceData = [messagevalueForKey:@"wavAudioData"];
 

上传代码

 
//kHostURL为开发者公司的APP对应的主域名,比如http://xxx.yyy.cn
AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc]initWithBaseURL:[NSURLURLWithString:kHostURL]];
manager.requestSerializer.timeoutInterval = 100;
 
NSMutableDictionary *paras = [[NSMutableDictionary alloc]init];
[parassetValue:self.msgTypeforKey:@"msgType"];
 //以file的形式上传,这里的key很重要"accessory",这个是和服务器端对应的,千万不能乱写,一定要看接口文档,不然会上传失败
[parassetValue:(__bridgeid)((__bridgeFILE *)(voiceData))forKey:@"accessory"];
[parassetValue:[BLLUser getPushToken]forKey:@"senderPushToken"];
[parassetValue:self.receiverPushTokenforKey:@"receiverPushToken"];
[parassetObject:[Base getKey]forKey:@"ukey"];
 
AFHTTPRequestOperation * operation = [managerPOST:kBLLUrl_Chat_Chatparameters:parasconstructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    formatter.dateFormat = @"yyyyMMddHHmmss";
    NSString *str = [formatterstringFromDate:[NSDate date]];
    //fileName这里取当前时间戳
    //accessory还是一样和服务端对应,具体看你自己的接口文档
    //mimeType选择@"amr/mp3/wmr",意思是告诉服务端,我上传的文件类型是支持三种格式amr、mp3和wmr,这里需要注意
    //这里我是上传了一个amr格式的语音文件,那么如果你的语音文件为其它格式,一定要和服务端对应上,比如服务端让你上传wav格式的语音,那么你拿到的是amr,怎么办?讲个笑话,有人直接改后缀,服务端不是让我上传wav的嘛,直接改.wav不就可以了嘛!真的有人这样想这样做了。那么这里告诉你,你是男的,穿了女人的衣服,你仍然是男的。即使割掉丁丁也不是女的,最多算是不男不女。解决方法就是找第三方库,把你的amr语音转换为wav,然后转为NSData再上传就可以了。
    NSString *fileName = [NSStringstringWithFormat:@"%@.amr", str];
    [formDataappendPartWithFileData:voiceDataname:@"accessory"fileName:fileNamemimeType:@"amr/mp3/wmr"];
}success:^(AFHTTPRequestOperation *operation, NSData * responseObject) {
    NSLog(@"回调成功!");
    
    NSError * error;
    NSDictionary * dic = [NSJSONSerializationJSONObjectWithData:responseObjectoptions:NSJSONReadingAllowFragmentserror:&error];
    //json解析得到存储服务器返回的字典
    NSLog(@"状态==%@",dic[@"msg"]);
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
  //连接服务器失败
    NSLog(@"发送失败");
}];
 
operation.responseSerializer = [AFHTTPResponseSerializer serializer];
[operationstart];
 

代码可以直接copy,改baseURL和路径,已经上传的关键参数。就可以上传成功。

联系作者

另外博主维护一个iOS开发技术支持群:487599875,进群必须改名,群名片格式:城市-iOS-名字,例如广州-iOS-文明。

  • 版本声明:本文由标哥的技术博客转载并精心整理、编辑、发布于本站,【阅读原文】

原文  http://www.huangyibiao.com/ios-upload-audo-to-server/
正文到此结束
Loading...