2

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

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

4

1 回答 1

2

基本上,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是名称和值)。

于 2013-01-12T17:27:35.440 回答