• 第五十四篇、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];
  • 相关阅读:
    【2】Java包装类
    【1】Java异常
    【10】Java多态:内部类
    【9】Java多态:接口
    【8】Java多态:抽象类(abstract关键字)
    【7】Java多态:向上转型、向下转型、instanceof运算符
    【6】Java单例模式
    元素定位工具:Chrome浏览器ChroPath插件
    linux添加环境变量
    php导出数据到多个csv并打包压缩
  • 原文地址:https://www.cnblogs.com/HJQ2016/p/5962828.html
Copyright © 2020-2023  润新知