如何处理 javascript 中的真实字符串数据
How to handle true string data in javascript
我有控制器方法和javascript录音方法。
控制器:
此控制器将return字符串数据
@RequestMapping(value = "/sendAudioBlobData/{questionId}", headers = "content-type=multipart/*", method = { RequestMethod.GET, RequestMethod.POST })
@ResponseBody
public String getBlob(HttpServletRequest request,HttpServletResponse response, ModelMap model, @RequestParam(value = "file") MultipartFile file, @PathVariable(value = "questionId") int questionId) {
boolean flag = false;
String id = Integer.toString(questionId);
String fileName = null;
byte[] bytes;
try {
bytes = file.getBytes();
if (!file.isEmpty()) {
id = id + ".mp3";
fileName = VOPortalConstants.NLE_USER_AUDIO_FILES_ROOT + File.separator + id;
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(fileName)));
stream.write(bytes);
stream.close();
File f = new File(fileName);
if(f.exists()) {
response.addHeader("Content-Length", f.length() + "");
FileUtils.sendFile(f, response.getOutputStream());
}
}
}
catch (IOException e) {
logger.error("ERROR: ", e);
}
String fName = fileName.replace(VOPortalConstants.NLE_PATH, VOPortalConstants.NLE_URL_CONST);
return fName;
}
JS方法:
此代码提供请求(POST)以录制用户的音频
function saveAudioFile() {
var questionId = window.questionList[window.counter].id;
recorder && recorder.exportWAV(function(blob) {
var formData = new FormData();
formData.append("file", blob);
$.ajax({
url : "sendAudioBlobData/" + questionId,
type: 'POST',
data: formData,
dataType: "text",
contentType: false,
processData: false,
success: function(data) {
debugger
var audio = $("#your_voice");
$("#your_voice_source").attr("src", data);
/****************/
audio[0].pause();
audio[0].load();//suspends and restores all audio element
//audio[0].play();
/****************/
},
error: function() {
alert("not so boa!");
}
});
});
}
在控制器中,return值为字符串,如下所示 -> fName=/NLERESOURCES/NLE/VOICE/USERVOICE\ 107.mp3
but return数据在js中看起来如下-> RIFF$@WAVEfmt������ ... ... ����������������������
我如何处理真正的字符串数据?
谢谢
FileUtils.sendFile 正在从控制器返回文件作为响应输出流的一部分。
我有控制器方法和javascript录音方法。
控制器:
此控制器将return字符串数据
@RequestMapping(value = "/sendAudioBlobData/{questionId}", headers = "content-type=multipart/*", method = { RequestMethod.GET, RequestMethod.POST })
@ResponseBody
public String getBlob(HttpServletRequest request,HttpServletResponse response, ModelMap model, @RequestParam(value = "file") MultipartFile file, @PathVariable(value = "questionId") int questionId) {
boolean flag = false;
String id = Integer.toString(questionId);
String fileName = null;
byte[] bytes;
try {
bytes = file.getBytes();
if (!file.isEmpty()) {
id = id + ".mp3";
fileName = VOPortalConstants.NLE_USER_AUDIO_FILES_ROOT + File.separator + id;
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(new File(fileName)));
stream.write(bytes);
stream.close();
File f = new File(fileName);
if(f.exists()) {
response.addHeader("Content-Length", f.length() + "");
FileUtils.sendFile(f, response.getOutputStream());
}
}
}
catch (IOException e) {
logger.error("ERROR: ", e);
}
String fName = fileName.replace(VOPortalConstants.NLE_PATH, VOPortalConstants.NLE_URL_CONST);
return fName;
}
JS方法:
此代码提供请求(POST)以录制用户的音频
function saveAudioFile() {
var questionId = window.questionList[window.counter].id;
recorder && recorder.exportWAV(function(blob) {
var formData = new FormData();
formData.append("file", blob);
$.ajax({
url : "sendAudioBlobData/" + questionId,
type: 'POST',
data: formData,
dataType: "text",
contentType: false,
processData: false,
success: function(data) {
debugger
var audio = $("#your_voice");
$("#your_voice_source").attr("src", data);
/****************/
audio[0].pause();
audio[0].load();//suspends and restores all audio element
//audio[0].play();
/****************/
},
error: function() {
alert("not so boa!");
}
});
});
}
在控制器中,return值为字符串,如下所示 -> fName=/NLERESOURCES/NLE/VOICE/USERVOICE\ 107.mp3
but return数据在js中看起来如下-> RIFF$@WAVEfmt������ ... ... ����������������������
我如何处理真正的字符串数据?
谢谢
FileUtils.sendFile 正在从控制器返回文件作为响应输出流的一部分。