使用servlet接收音频文件

时间:2013-01-06 02:23:53

标签: java php flex servlets

简短故事: 我有一个Servlet接收一个我无法读取的请求(getContentType()= audio / x-wav)。我需要阅读此wave并将其保存在服务器端。

详细故事: 我对Flex,javascript,PHP和Python一无所知,我想(从客户端“浏览器”)记录一个wave文件并将其发送到服务器以保存它(用于进一步的ASR处理)。

经过一番搜索,我发现了一个名为Wami-Recorder的库(使用flex和java scrip),我已经使用过了,但是它没有给我任何java服务器端示例,它也缺少文档所以我决定让我的双手肮脏让它运转起来。 它包含一个服务器端python和PHP示例(我将列出PHP一个):

<?php    
# Save the audio to a URL-accessible directory for playback.    
parse_str($_SERVER['QUERY_STRING'], $params);    
$name = isset($params['name']) ? $params['name'] : 'output.wav';    
$content = file_get_contents('php://input');    
$fh = fopen($name, 'w') or die("can't open file");    
fwrite($fh, $content);    
fclose($fh);    
?>    

最后要注意的是,我确信如果我创建了一个套接字服务器并将请求定向到它,我将能够轻松获取媒体,但我希望所有内容都由Servlet处理。

1 个答案:

答案 0 :(得分:2)

基本上,Java servlet相当于PHP的以下行,这是代码中的关键行,

$content = file_get_contents('php://input');    

InputStream input = request.getInputStream();

这基本上返回唯一的HTTP请求体。您可以使用通常的Java方式将其写入任意OutputStream。例如,new FileOutputStream("/some.wav")

您应该只知道HTTP请求主体只能读取一次,并且当您调用任何request.getParameterXxx()方法时,它也会被隐式解析。因此,如果您对请求URI查询字符串中的参数感兴趣,那么您应该使用

String queryString = request.getQueryString();

并自行解析(即在&上拆分,然后在=上拆分,然后在URLDecode拆分名称和值。)