保存一个PHPSpreadSheet对象

时间:2018-10-11 17:50:47

标签: php laravel google-app-engine google-cloud-storage phpspreadsheet

我有一个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 :(得分:0)

找到了一种通过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;

答案 1 :(得分:-1)

尝试这种方式:

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