Получение аудиофайла с помощью сервлета
Краткая история: У меня есть сервлет, который получает запрос (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);
?>
Последнее замечание заключается в том, что я уверен, что если я создам сервер сокетов и направлю на него запрос, я смогу легко получить носитель, но я хочу, чтобы все обрабатывалось сервлетами.
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
имя и значение).