Сохранение объекта PHPSpreadSheet - PullRequest
0 голосов
/ 11 октября 2018

У меня есть приложение Laravel, развернутое в Google App Engine.Согласно правилам архитектуры GAE, вы не можете сохранять файлы по локальному пути.Я использую PHP Spreadsheet для генерации файлов Xlsx и загрузки их для пользователя.Так что это работает локально, но не в развернутом приложении.

$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save('storage/SomeExcelFile.xlsx');

Тогда я могу загрузить файл с помощью ..

return Storage::disk('public')->download('SomeExcelFile.xlsx');

Но без возможности локального сохранения файлов на производствеверсия приложения, как я буду хранить мой файл?У меня есть приложение, подключенное к хранилищу, куда я могу загружать файлы.Но мне нужен путь к файлу, чтобы сделать это, и так как этот файл был создан в приложении с помощью сценариев и никогда не был сохранен до развертывания, я не могу найти способ сохранить его.

Насколько я понял, вы не можете записать файл xlsx напрямую на диск.Например, я могу написать текстовый файл с текстом sample data в мое хранилище облачного хранилища Google ..

Storage::disk('gcs')->put('String.txt', 'sample data');

Но не могу найти способ сделать это с моим файлом Excel.Также приложение развертывается в среде Flex, поэтому я не могу использовать структуру URL файла gs://

Ответы [ 2 ]

0 голосов
/ 11 октября 2018

Нашел способ обойти поток с Symfony

$response = new StreamedResponse(
    function () use ($writer) {
        $writer->save('php://output');
    }
);
$response->headers->set('Content-Type', 'application/vnd.ms-excel');
$response->headers->set('Content-Disposition', 'attachment;filename="Services Reformatted.xlsx"');
$response->headers->set('Cache-Control', 'max-age=0');
return $response;
0 голосов
/ 11 октября 2018

Попробуйте следующим образом:

file_put_content ('your / project / path / public / filename.xlsx', $ writer);

...