【问题标题】:What I did is correct or not? When I send an audio file to server in NSData我做的对不对?当我将音频文件发送到 NSData 中的服务器时
【发布时间】:2013-04-09 11:09:37
【问题描述】:

我正在以.wav 格式录制音频并将.wav1 文件转换为NSData 并发送到服务器。

记录的路径是:

file://localhost/var/mobile/Applications/8F81BA4C-7C6F-4496-BDA7-30C45478D758/Documents/sound.wav

我正在使用以下方式发送到服务器:

audioURL=@"file://localhost/var/mobile/Applications/8F81BA4C-7C6F-4496-BDA7-30C45478D758/Documents/sound.wav";


NSURL *url=[NSURL URLWithString:urlString];
 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url];
    [request setHTTPMethod: @"POST"];
    [request setValue: @"multipart/form-data" forHTTPHeaderField: @"Content-Type"];
NSData *audiodata = [NSData dataWithContentsOfURL:audioURL];
NSMutableData *highScoreData = [NSMutableData data];
[highScoreData appendData:audiodata];
[request setHTTPBody:highScoreData];
 nsurlConnection = [[NSURLConnection alloc] initWithRequest: request
                                                  delegate: self];

当我播放它时,它会为我提供正确的录制声音。但是,当我从服务器播放相同的录制声音时,它会显示“引用”而不是实际录制的声音。

我如何录制音频以及如何发送音频的完整代码can be found here

请告诉我我这样做的方式(即发送到服务器)是否正确?

【问题讨论】:

  • 您确定要将数据作为“multipart/form-data”而不是音频文件格式类型发送吗?这可能会影响接收系统解释它的方式。
  • 我必须以字节形式发送......所以现在,什么是正确的放置?这个“multipart/form-data”就足够了吗,还是我们需要放任何其他的? @gaige
  • 对于实际的多部分表单,您必须创建符合多部分的数据,这意味着创建子部分,正确命名它们,然后放置分隔线。请参阅@Nikhil 的stackoverflow.com/questions/9460817/… 答案以获取示例。

标签: iphone ios objective-c avaudioplayer audio-recording


【解决方案1】:

多部分请求不是这样工作的。您需要边界来区分不同数据。请查收:http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

对于解决方案,我使用 AFNetworking (https://github.com/AFNetworking/AFNetworking)。 AFHTTPClient 可以为您创建多部分请求。 检查:http://afnetworking.github.com/AFNetworking/Classes/AFHTTPClient.html#//api/name/multipartFormRequestWithMethod:path:parameters:constructingBodyWithBlock

【讨论】:

    【解决方案2】:

    这是我用来上传的代码。标头部分取决于您的服务器如何处理它。 AsiFormdata 在这里更合适。

    NSString* 文件字符串;

    fileString = [[self documentsPath]
                  stringByAppendingPathComponent:@"testcombine.m4a"];
    
    NSData* songData=[NSData dataWithContentsOfFile:fileString];
    
    
    
    NSURL *url = [[NSURL alloc] initWithString:[NSString stringWithFormat:@"http://%@/UsingWebServer2/UploadServlet",RemoteEndpoint]];
    
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
    
     [request setData:songData withFileName:@"upload_test.m4a" andContentType:@"audio/m4a" forKey:@"file"];
    
    //[request appendPostData:[Jstring  dataUsingEncoding:NSUTF8StringEncoding]]; 
    [request startSynchronous];
    

    【讨论】:

      【解决方案3】:

      如果您想通过 multipart/form-data 发送数据,请使用ASIFormDataRequest。查找文档here 以获取更多参考。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-12-11
        • 1970-01-01
        • 1970-01-01
        • 2020-01-07
        • 1970-01-01
        • 2022-11-01
        • 2019-12-18
        相关资源
        最近更新 更多