我有一个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://
答案 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);