2011-03-08 84 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