2011-03-08 53 views
1

用AVAudioRecorder錄製後,生成的聲音文件必須發送到Web服務。文件數據必須經過URL編碼並複製到POST請求的主體中。錄音格式爲kAudioFormatAppleLossless。 作爲第一步,URL編碼之前,我試圖把文件的.caf複製到的NSString,使用如何將二進制數據轉換爲NSstring?

NSStringEncoding encoding; 
NSString * filestring = [NSString 
         stringWithContentsOfURL:self.audioRecorder.url 
        usedEncoding:&encoding 
         error:&error]; 

我得到了以下錯誤:

Error Domain=NSCocoaErrorDomain Code=264 "The operation couldn\u2019t be completed. (Cocoa error 264.)"

編碼返回信息0x5bab9f0,它不在爲NSStringEncoding定義的值列表中。 AVAudioRecorder在寫入文件時使用什麼編碼?將二進制文件轉換爲URL編碼字符串的最佳方式是什麼?

回答

3

從來沒有。使用。 NSString的。對於。數據。那是。不。 A.字符串... 使用NSData代替,你不需要URLEncode它(因爲它已經是')。

您可以使用此:

NSMutableData *postData = [[NSMutableData alloc] init]; 
[postData appendData:[@"--boundary\r\nContent-Disposition: form-data; name=\"myfile\"; filename=\"ad.gif\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[postData appendData:[NSData dataWithContentsOfURL:self.audioRecorder.url]]; 
[postData appendData:[@"\r\n--boundary--\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 

[myRequest setHTTPMethod:@"POST"]; // this you probably already did. 
[myRequest setHTTPBody:postData]; 
+0

文件內容必須被複制到POST體作爲參數,而不是發送爲形式的數據。嘗試使用NSData,但結果並不像服務器預期的那樣,見下文:sendFileRequest = [ASIFormDataRequest requestWithURL:myURL]; NSData * data = [NSData dataWithContentsOfURL:audioRecorder.url]; \t \t [sendFileRequest setPostValue:data forKey:kParamRecordBinaryContent]; – primulaveris 2011-03-08 16:51:56

+0

您是否使用$ _FILES ['myfile']請求文件; (如果你使用PHP)?順便說一句。你*是*使用NSURLConnection + NSMutableURLRequest,對吧? – elslooo 2011-03-08 18:47:08

+1

這是一個web服務。然而,發現的二進制數據必須首先爲服務器進行base64編碼,因此最終的解決方案是'NSString * encodedString = [QSStrings encodeBase64WithData:[NSData dataWithContentsOfURL:audioRecorder.url]];'另請參見[鏈接](http://stackoverflow.com/questions/392464/any-base64-library-on-iphone-sdk)非常感謝您的幫助 – primulaveris 2011-03-09 19:58:13