Zend Framework CSV скачать

В настоящее время я работаю над генератором CSV в Zend Framwork. На этом этапе я могу создать действительный файл CSV на стороне сервера, и теперь я хочу загрузить этот файл. В настоящее время я использую следующий код:

$reader = new \PHPExcel_Reader_CSV();
$reader->setReadDataOnly(true);

$excel = $reader->load($file); //$file = Path of the csv file in the local storage

$writer = \PHPExcel_IOFactory::createWriter($excel, 'CSV');

$path = 'public/download';
$fileName = 'test.csv';

$writer->save($path . '/' . $fileName);

$response = new ResponseStream();
$response->setStream(fopen($path . '/' . $fileName, 'r'));

$headers = new Headers();
$headers->addHeaders([
    'Content-Type' => [
        'application/force-download',
        'application/octet-stream',
        'application/download'
    ],
    'Content-Length' => filesize($path . '/' . $fileName),
    'Content-Disposition' => 'attachment;filename=' . $fileName,
    'Cache-Control' => 'must-revalidate',
    'Pragma' => 'no-cache',
    'Expires' => 'Thu, 1 Jan 1970 00:00:00 GMT'
]);

$response->setHeaders($headers);

$cookie = new SetCookie('downloadComplete', 'true', time() + 60 * 60, '/');
$response->getHeaders()->addHeader($cookie);

$response->setContent($writer);

return $response;

Проблема в том, что теперь я получаю только всплывающее окно с ошибкой Zend:

statusCode 200 thrownError SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data at line 1 column 21 of the JSON data

И содержимое моего CSV в качестве текста ответа.

У тебя есть идея? Заранее спасибо.

Возможно, у вас есть CSV с недопустимым форматом, попробуйте заменить другой 100% действительный CSV в сгенерированном файле.

zen 17.08.2018 20:58

Я уже пробовал этот подход. Я только что узнал, что zend отправляет неправильные заголовки для загрузки, если вы отправляете запрос загрузчику. Так что по прямой ссылке для скачивания загрузка работает ...

Julian Gassner 20.08.2018 08:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
284
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После долгого расследования я обнаружил, что загрузка завершается ошибкой только в том случае, если мы отправляем запрос Post к действию загрузки через zend (я предполагаю, что он переопределяет самоустановленные заголовки). Итак, я отправил запрос через перенаправление java-скрипта ($viewModel->addScriptBlock('window.location = "Your URL";');), и он сработал.

Другие вопросы по теме