AFNetworking 通过 JSON 从音频发送字节

AFNetworking send bytes from Audio via JSON

我有客户端 iOS 应用程序,它应该使用音频字节向服务器发送 json 请求。

在服务器上,我有下一个型号的 Hibernate (MySQL):

@Column(name = "voice_data", nullable = false, unique = false, columnDefinition="mediumblob")
@Lob
public byte[] getVoiceData() { return voiceData; }
public void setVoiceData(byte[] voiceData) { this.voiceData = voiceData; }

在iOS我想获取刚刚录制的语音并保存到数据库:

    @property (strong, nonatomic) AVAudioRecorder       *audioRecorder;

    // some code ... 
    NSData *data = [[NSData alloc] initWithContentsOfFile:_audioRecorder.url.path];
    NSString* dataAsString = [NSString stringWithUTF8String:[data bytes]];

    NSDictionary *params = @{
                             MODEL_VOICE_VOICE_DATA : dataAsString,
                             // etc parameters
                             };

    NSString *url = [NSString stringWithFormat:@"%@", URL];        
    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    manager.requestSerializer = [AFJSONRequestSerializer serializer];

    [manager POST:url parameters:params
          success:^(AFHTTPRequestOperation *operation, id responseObject) {
              NSLog(@"%@", responseObject);
          } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
              // ...
          }
     ];
}
//

然后在服务器上我有输入请求数据:

[{"id":13,"voiceData":[],"date":....

所以,看起来它没有从音频中正确解析(因为它是空的)。我做错了什么?我应该如何将数据发送到服务器?

如@i_am_jorf 所述,问题在于将二进制数据转换为 UTF-8 字符串。 用 QSUtilities library:

解决
  1. 下载 link 项目库(在 iOS 8+ 中需要使用 ARC 进行一些更新)
  2. 使用encodeBase64WithData函数转换数据

NSData *data = [[NSData alloc] initWithContentsOfFile:_audioRecorder.url.path]; NSString* dataAsString = [QSStrings encodeBase64WithData:data];