iOS上傳語音到服務器



用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];


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM