Исключение: «Не удается установить содержимое для экземпляра BinaryFileResponse». выбрасывается только на рабочий сервер - PullRequest
0 голосов
/ 05 ноября 2019

Я хочу, чтобы мои пользователи загружали файл .csv.

Код в моем контроллере работает безупречно на моей локальной машине и на сервере разработки. Однако он не работает на производственном сервере.

Фреймворк: Laravel 5.5.44

Версия PHP: 7.2

$videos = Video::whereNotNull('title')->get();

//First row for labels
$list = array([
    'id'            => 'Video ID',
    'director'      => 'Director',
    'title'         => 'Title',
]);

foreach($videos as $video) {
    $list[] = [
        'id'            => $video->id,
        'director'      => $video->director,
        'title'         => $video->title,
    ];
}

$today = date('Ymd');
$filename = $today.'-list.csv';
$fp = fopen(storage_path($filename), 'w');

foreach ($list as $fields) {
    fputcsv($fp, $fields);
}
fclose($fp);

return response()->download(storage_path($filename)); 

При запуске контроллерана рабочем сервере вместо загрузки файла я получаю prod.ERROR: The content cannot be set on a BinaryFileResponse instance..

Я только что заметил, что исключение выдается, только если среда приложения настроена на производство.

Мне удалось воспроизвести поведение на моем локальном компьютере, установив

APP_ENV=prod в файле .env.

Я озадачен. Мне не удалось найти достаточно информации в официальной документации, и я до сих пор не знаю, как решить эту странную проблему.

1 Ответ

1 голос
/ 06 ноября 2019

Ваш AfterMiddleware пытается установить содержимое в Response, что вы не можете сделать с BinaryFileResponse объектом, любые вызовы setContent вызовут эту ошибку.

Вы должны будете вычислитьЕсли вам нужно промежуточное программное обеспечение vrkansagara/lara-out-press, которое вы используете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...