Обработка больших файлов с помощью Flysystem - PullRequest
0 голосов
/ 21 мая 2018

Я использую 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 Ответ

0 голосов
/ 21 мая 2018

попробуйте добавить flush(); после fpassthru($downloadableFileStream);

, чтобы оно выглядело как

fpassthru($downloadableFileStream);
flush();

Также вам не нужны $mimeType и $filename в использовании

...