2016-08-20 15 views
0

Я пытаюсь создать простую службу REST для обслуживания аудиофайлов (с поддержкой поиска). Я использую этот пример, который основан на Джерси: https://github.com/aruld/jersey-streaming/tree/jersey2Spark java Обслуживание mp3-файла (динамический с поиском)

Это довольно простой пример, он прислушивается к GET и HEAD, запросы, используемые браузеры, обратите внимание на заголовок Range и отвечать 206 плюс архив запрошенный срез (с байтовыми диапазонами). Уловка здесь в том, что я переписываю это на искровой java (крошечный каркас с встроенным сервером причала).

Кажется, что все в порядке. Браузер отправляет GET, и сервер соответственно отбирает ответ ... хотя игрок никогда не загружает и ничего не играет. Сделан запрос и заголовок ответа совершенен:

Запрос:

Host: localhost:4567 
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:47.0) Gecko/20100101 Firefox/47.0 
Accept: audio/webm,audio/ogg,audio/wav,audio/*;q=0.9,application/ogg;q=0.7,video/*;q=0.6,*/*;q=0.5 
Accept-Language: en-US,en;q=0.5 
Range: bytes=0- 
Connection: keep-alive 

Ответ:

Accept-Ranges: bytes 
Content-Length: 1048577 
Content-Range: bytes 0-1048576/5563904 
Content-Type: audio/mp3 
Date: Sat, 20 Aug 2016 05:41:23 GMT 
Last-Modified: Sat Aug 20 01:12:37 BRT 2016 
Server: Jetty(9.3.6.v20151106) 
sasd 

Одна вещь, которую я заметил, что, кажется, передача этого запроса никогда не заканчивается. Когда я закрываю сервер, передача заканчивается на 0,03 КБ (всегда).

Мое доказательство концептуального кода приложения: http://pastebin.com/xjkLne7E

ответ

0

Нашли ответ! я сделал некоторые дополнительные исследования и обнаружили, что это особенность Спарк быть реализована: https://github.com/perwendel/spark/issues/397

Пользователь tchoulihan уже пытались реализовать такую ​​функцию с успехом здесь:

https://github.com/tchoulihan/torrenttunes-client

Вот образец запрос искра прибудет, который обрабатывает загрузку:

https://github.com/tchoulihan/torrenttunes-client/blob/master/src/main/java/com/torrenttunes/client/webservice/Platform.java#L555

Я не могу вставить каплю здесь, так как GPLv3 столкнется с лицензией cc-wiki. Работа Хэса вдохновлена ​​тем же самым ресурсом, который я впервые нашел. Исходя из этого, я закодировал собственную версию, которая работает на android, mozilla и chrome.

TL; проблема была в том, что mozilla не понимает корректность запроса 206, и я не закрывал и не смывал ByteOutputStream. Также я попытался использовать StreamingOutput из JAX в качестве ответа вместо отправки простого необработанного HTTP-ответа.