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

Краткая история. У меня есть сервлет, который получает запрос (getContentType () = audio / x-wav), который я не могу прочитать. Мне нужно прочитать эту волну и сохранить ее на стороне сервера.

Подробная история. Я ничего не знаю о Flex, javascript, PHP и Python. Я хочу записать (с клиентской стороны «Браузер») волновой файл и отправить его на сервер для его сохранения (для дальнейшей обработки ASR).

После некоторого поиска я нашел библиотеку под названием Wami-Recorder (использует flex и java-скрипт), которую я уже использовал, но это не дало мне никакого примера на стороне сервера 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); ?> 

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

В принципе, Java-сервлет эквивалент следующей строки 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 имя и значение).