Обработка больших файлов с помощью Flysystem
Я использую Flysystem в приложении Symfony для управления загрузкой / выгрузкой файлов на S3.
$downloadableFileStream = $this->get("filesystem")->readStream($document->getDocument()),
$mimeType = $this->get("filesystem")->getMimetype($document->getDocument()),
$filename =$document->getDocument()
if (ob_get_level()) ob_end_clean();
return new StreamedResponse(function () use ($downloadableFileStream, $mimeType, $filename) {
fpassthru($downloadableFileStream);
}, 200, [
'Content-Transfer-Encoding', 'binary',
'Content-Type' => "application/octet-stream",
'Content-Disposition' => ('attachment; filename="' . $filename . '"'),
'Content-Length' => fstat($downloadableFileStream)['size'],
]);
Это очень медленно для больших файлов, я думал, что использование потока не помещает все файлы в память, возможно я делаю что-то не так? (У меня та же проблема с загрузкой, я использую putStream).
Для небольших файлов загрузка происходит мгновенно, но для больших файлов кажется, что весь файл загружается в файловую систему перед началом загрузки.
Есть ли способ "начать" загрузку, не получить файл entiere?
Какие-либо предложения?
Спасибо:)
1 ответ
Попробуйте добавить flush();
после fpassthru($downloadableFileStream);
так будет выглядеть
fpassthru($downloadableFileStream);
flush();
Также вам не нужно $mimeType
а также $filename
в использовании