java - 使用 servlet 接收音频文件

标签 java php apache-flex servlets

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

详细故事: 我对 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 处理。

最佳答案

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

关于java - 使用 servlet 接收音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14178645/

相关文章:

java - Android游戏的逻辑流程

java - 使用 MS Exchange 服务器从 java 发送邮件,导致连接超时

javascript - 单击在 WebView 中不起作用

php - 在单个结果页面中实现 "Prev"和 "Next"功能但保持先前搜索结果的顺序的最佳方法是什么?

php - 在php mysql查询中添加javascript

apache-flex - 我如何将一个 MXML 文件嵌入另一个 MXML 文件?

apache-flex - Flex AS3 - 向 ItemRenderer 的所有实例发送事件

java - http转换为https进入无限循环

java - 如何使用 Dropbox 的 Core Java API 创建嵌入式文件夹?

java - 如何停止为 BlazeDS 和 JPA 编写我不需要的 Java 属性 setter ?