Phpspreadsheet: загрузка не работает для файлов .csv и .pdf - PullRequest
0 голосов
/ 01 мая 2020

Я работаю с фреймворком Symfony 4. Моя цель - иметь возможность экспортировать данные в различных возможных форматах ( xlsx, ods, csv, pdf ).

В моем контроллере я сделал это так:

    /**
         * Permet d'exporter des données.
         *
         * @Route("rh/export", name="rh_export")
         */
        public function export(Request $request, ExportService $exportService)
        {
            $exportExcel = new ExportExcel();

            $form = $this->createForm(ExportExcelType::class, $exportExcel);
            $form->handleRequest($request);

            if ($form->isSubmitted() && $form->isValid()) {
                $spreadsheet = $exportService->export($exportExcel);

                switch($exportExcel->getExtension())
                {
                    case "xlsx":
                        $writer = new Xlsx($spreadsheet);
                    break;

                    case "csv":
                        $writer = new Csv($spreadsheet);
                    break;

                    case "ods":
                        $writer = new Ods($spreadsheet);
                    break;

                    case "pdf":
                        $writer = new Dompdf($spreadsheet);
                    break;

                    default:
                        $writer = new Xlsx($spreadsheet);
                    break;
                }

                if($exportExcel->getExtension() === "pdf")
                {
                    $writer->writeAllSheets();
                }

                // Create a Temporary file in the system
                $fileName = $exportExcel->getNomFichier().'.' . $exportExcel->getExtension();
                $temp_file = tempnam(sys_get_temp_dir(), $fileName);

                // Create the excel file in the tmp directory of the system
                $writer->save($temp_file);

                // Return the excel file as an attachment
                return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);
            }

            return $this->render('rh/export.html.twig', [
                'form' => $form->createView(),
            ]);
        }
  1. Я анализирую отправку формы.
  2. Я создаю электронную таблицу
  3. В зависимости от типа требуемого файла я инициализирую $ writer
  4. Создать Временный файл в системе
  5. Создание файла Excel в каталоге системы tmp
  6. Возвращение файла Excel в виде вложения

Странно то, что если тип файла - .xlsx или .ods, файл загружается правильно. Однако, если это .csv или .pdf, то файл не загружается, и вместо этого он открывается в моем браузере

РЕДАКТИРОВАТЬ: я решил свою проблему с:

Заменить:

 // Create a Temporary file in the system
                $fileName = $exportExcel->getNomFichier().'.' . $exportExcel->getExtension();
                $temp_file = tempnam(sys_get_temp_dir(), $fileName);

                // Create the excel file in the tmp directory of the system
                $writer->save($temp_file);

                // Return the excel file as an attachment
                return $this->file($temp_file, $fileName, ResponseHeaderBag::DISPOSITION_INLINE);

1030 *
...