简介:我有一个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处理。
基本上,Java servlet等同于以下PHP行,这是代码中的关键行,
$content = file_get_contents('php://input');
是
InputStream input = request.getInputStream();
这基本上返回了唯一的HTTP请求正文。您可以将其以任意OutputStream常用的Java方式编写。例如,一个new FileOutputStream("/some.wav")。
OutputStream
new FileOutputStream("/some.wav")
您应该只意识到HTTP请求正文只能被读取一次,并且在您调用任何request.getParameterXxx()方法时都会隐式地对其进行解析。因此,如果您也对请求URI查询字符串中的参数感兴趣,则应改用
request.getParameterXxx()
String queryString = request.getQueryString();
并自己进一步解析(即分割为&,然后分割为=,然后URLDecode是名称和值)。
&
=
URLDecode