小编典典

用servlet接收音频文件

java

简介:我有一个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处理。


阅读 283

收藏
2020-11-26

共1个答案

小编典典

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

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

InputStream input = request.getInputStream();

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

您应该只意识到HTTP请求正文只能被读取一次,并且在您调用任何request.getParameterXxx()方法时都会隐式地对其进行解析。因此,如果您也对请求URI查询字符串中的参数感兴趣,则应改用

String queryString = request.getQueryString();

并自己进一步解析(即分割为&,然后分割为=,然后URLDecode是名称和值)。

2020-11-26