你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS7技巧 >> iOS上傳語音到服務器的實例

iOS上傳語音到服務器的實例

編輯:IOS7技巧
上傳語音我們可以通過文件上傳功能來實現了,下面來看一段iOS上傳語音到服務器的實例吧,具體的細節如下文介紹。

iOS上傳語音到服務器,這裡介紹用AFN上傳語音文件到服務端。

語音轉NSData

如果不是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];
 


代碼可以直接copy,改baseURL和路徑,已經上傳的關鍵參數。就可以上傳成功。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved