Проблема : Response :: download (...) не создает поток, поэтому я не могу обслуживать файл .mp3.
Решение : как документ Symfony HttpFoundation . говорит в пункте обслуживающего файла:
"if you are serving a static file, you can use a BinaryFileResponse"
Файлы .mp3, которые мне нужно обслуживать, - это статика на сервере и хранятся в « / storage / songs / », поэтому я решил использовать BinaryFileResponse , а метод для обслуживания .mp3 стал:
use SymfonyComponentHttpFoundationBinaryFileResponse;
[...]
public function getSong(Song $song) {
$path = storage_path().DIRECTORY_SEPARATOR."songs".DIRECTORY_SEPARATOR.$song->path.".mp3");
$user = Auth::user();
if($user->activated_at) {
$response = new BinaryFileResponse($path);
BinaryFileResponse::trustXSendfileTypeHeader();
return $response;
}
App::abort(400);
}
BinaryFileResponse автоматически обрабатывает запросы и позволяет полностью обслуживать файл (путем создания только одного запроса с кодом Http 200) или разделить на медленное соединение (больше запросов с кодом Http 206 и один окончательный запрос с кодом 200).
Если у вас есть файл mod_xsend, который вы можете использовать (для ускорения потоковой передачи), добавив:
BinaryFileResponse::trustXSendfileTypeHeader();
Код для андроида не нужно изменять для потоковой передачи файла.