Ответ двоичного файла Symfony завершается неудачно в конце процесса загрузки - PullRequest
0 голосов
/ 22 ноября 2018

Обычно я не задаю вопрос о переполнении стека, потому что всегда нахожу ответ на любую проблему, с которой у меня проблемы.Но здесь я не нашел четкого ответа, поэтому, если вы можете мне помочь, большое спасибо!

Я работаю над сайтом Symfony 3.4.Я сделал скрипт внутри моего контроллера, чтобы вернуть файл как BinaryFileResponse.

$response = new BinaryFileResponse($pathtofile);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, $filename);
return $response;

Сначала процесс загрузки работает нормально, но только в конце возникает ошибка.Chrome возвращает ошибку «Ошибка сети», и загруженный файл остается в виде .crdownload , а не переименовывается в .mp3 в моем случае.(Примечание: если я переименую файл вручную как .mp3 , он будет воспроизводиться правильно.)

Я искал возможную проблему со свойством content-length заголовков, нокажется, что он отправляется правильно, когда я проверяю Symfony Profiler Capture здесь

Я нашел способ обойти эту ошибку, используя поток, как упомянуто в Документах Symfony, например:

$stream  = new Stream('path/to/stream');
$response = new BinaryFileResponse($stream);

Мой файл обслуживается PHP-скриптом, но не генерируется им.Есть ли способ использовать его как статический файл вместо потока?

При использовании потокового решения клиент не может увидеть фактический размер файла, который не очень удобен для пользователя.Кроме того, это действительно медленно.

Спасибо за вашу помощь!

РЕДАКТИРОВАТЬ: первое решение работает на локальном хосте, но не на сервере prod.

...