Получение аудиофайла с помощью сервлета


Краткая история: У меня есть сервлет, который получает запрос (getcontenttype() = аудио/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);    
?>    

Последнее замечание заключается в том, что я уверен, что если я создам сервер сокетов и направлю на него запрос, я смогу легко получить носитель, но я хочу, чтобы все обрабатывалось сервлетами.

Author: Ahmed Hassanien, 2013-01-06

1 answers

В основном, Java-сервлет эквивалентен следующей строке PHP, которая является ключевой строкой в коде,

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

Является

InputStream input = request.getInputStream();

Это возвращает в основном единственное тело HTTP-запроса. Вы можете записать его в произвольный OutputStream обычным способом Java. Например, a new FileOutputStream("/some.wav").

Вы должны понимать, что тело HTTP-запроса может быть прочитано только один раз, а также что оно будет неявно проанализировано при вызове любого из методов request.getParameterXxx(). Так что, если вас интересует параметры в строке запроса URI запроса также, то вместо этого вы должны использовать

String queryString = request.getQueryString();

И проанализируйте его самостоятельно (т.Е. Разделите на &, затем разделите на =, затем URLDecode имя и значение).

 2
Author: BalusC, 2013-01-12 17:27:35