iOS上傳語音到伺服器的執行個體

來源:互聯網
上載者:User

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和路徑,已經上傳的關鍵參數。就可以上傳成功。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.