Мне нужно использовать BinaryFileResponse
для корректной обработки видео с помощью Length Headers и 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'],
]);
Других решений пока нет …