Мне нужно использовать BinaryFileResponse
для правильной обработки видео с заголовками Length и co. Также я хочу, чтобы пользователь разрешил настраивать другие хранилища (S3, Dropbox). Метод flysystem readStream
вернет resource
но BinaryFileResponse
нуждается в string
пути. Каков наилучший способ справиться с этим? Сначала загрузите весь файл на сервер до ответа?
Для этого вы можете использовать класс StreamedResponse. Вы должны будете провести некоторую передачу данных самостоятельно, но это довольно прямолинейно. Например, этот код использовался для включения "принудительной загрузки" для PDF файлов.
return new StreamedResponse(function () use ($stream) {
fpassthru($stream);
exit();
}, 200, [
'Content-Transfer-Encoding', 'binary',
'Content-Type' => 'application/pdf',
'Content-Disposition' => sprintf('attachment; filename="%s.pdf"', $filename),
'Content-Length' => fstat($stream)['size'],
]);