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:
解决
- 下载 link 项目库(在 iOS 8+ 中需要使用 ARC 进行一些更新)
- 使用
encodeBase64WithData
函数转换数据
NSData *data = [[NSData alloc] initWithContentsOfFile:_audioRecorder.url.path];
NSString* dataAsString = [QSStrings encodeBase64WithData:data];
我有客户端 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:
解决- 下载 link 项目库(在 iOS 8+ 中需要使用 ARC 进行一些更新)
- 使用
encodeBase64WithData
函数转换数据
NSData *data = [[NSData alloc] initWithContentsOfFile:_audioRecorder.url.path];
NSString* dataAsString = [QSStrings encodeBase64WithData:data];