美文网首页iOS进阶之路ios开发整理IOS
iOS 使用AFN上传语音到服务器

iOS 使用AFN上传语音到服务器

作者: ArchLL | 来源:发表于2016-10-27 11:23 被阅读713次

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

    语音转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];
    
    [parassetValue: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:^(idformData){
    
    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:voiceDataname:@"accessory"fileName:fileNamemimeType:@"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和路径,已经上传的关键参数。就可以上传成功。

    相关文章

      网友评论

        本文标题:iOS 使用AFN上传语音到服务器

        本文链接:https://www.haomeiwen.com/subject/eagjuttx.html