zoukankan      html  css  js  c++  java
  • 第五十四篇、OC利用AFN上传上传语音

    如果不是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<AFMultipartFormData> formData)
     {
                                                  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];
  • 相关阅读:
    【笔记】C++自学笔记系列02:类的组合与类的友元
    【windows程序设计】系列02:显示屏幕分辨率
    【笔记】C++自学笔记系列01:基础知识
    【windows程序设计】系列03:窗口与消息
    【windows程序设计】系列04:文本输出
    【Boost】系列05:数值与字符串转换
    【windows程序设计】系列01
    【Boost】系列04:实用技巧之禁止类拷贝构造和赋值
    【gdb】基本操作
    性能测试基本流程介绍(《软件性能测试过程详解与安全剖析》)
  • 原文地址:https://www.cnblogs.com/HJQ2016/p/5962828.html
Copyright © 2011-2022 走看看