Меню

Symfony StreamedResponse

Вход
  • Gemorroj 19.12.2017 17:17
  • Gemorroj

    Обновлено 15.08.2018 16:57

    Простой способ сэкономить память отдаче данных в Symfony.
    Пример контроллера если у нас есть поток (например, тип bytea из postgres).
    PHP

    public function downloadAction()
    {
            $data = \fopen('path_to_file.zip', 'r');
     
            $response = new StreamedResponse();
            $response->setCallback(function () use ($data) {
                \stream_copy_to_stream($data, \fopen('php://output', 'w'));
            });
            $contentDisposition = $response->headers->makeDisposition(\Symfony\Component\HttpFoundation\ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'myfile.zip');
            $response->headers->set('Content-Type', 'application/zip');
            $response->headers->set('Content-Disposition', $contentDisposition);
     
            return $response;
    }
     

     
    Пример контроллера если у нас есть файл.
    PHP

    public function downloadAction()
    {
            $response = new StreamedResponse();
            $response->setCallback(function () {
                \readfile('path_to_file.zip');
            });
            $contentDisposition = $response->headers->makeDisposition(\Symfony\Component\HttpFoundation\ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'myfile.zip');
            $response->headers->set('Content-Type', 'application/zip');
            $response->headers->set('Content-Disposition', $contentDisposition);
     
            return $response;
    }
     

Удаление

Вы уверенны, что хотите удалить сообщение?

Это безвозвратная операция.

Отмена Удалить