Laravel 生产服务器中的存储路径
Laravel storage path in production server
我在生产服务器中保存生成的 excel 文件时遇到了问题,我在 /public/reports
目录中设置了存储路径,如下所示:
$filename = "report-".date('YmdHis').".xlsx";
$storage_path = public_path('reports');
但是,文件不会保存在 reports
文件夹中,而是保存在 public
文件夹中,我试过
$storage_path = public_path().'\reports\';
但这将保存在 public 文件夹之外。
我是 laravel 的新手,如果有人能指出解决方法,我将不胜感激。
编辑
这是整个区块:
public function handle()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->getStyle('C')->getAlignment()->setHorizontal('left');
$sheet->getColumnDimension('A')->setWidth(8);
$sheet->getColumnDimension('B')->setWidth(30);
$sheet->setCellValue('A1', 'title');
$sheet->setCellValue('B1', 'brief');
$reports = Report::get();
if(count($reports) > 0) {
$rowCount = 2;
foreach($reports as $report) {
$sheet->setCellValue('A' . $rowCount, $report->title);
$sheet->setCellValue('B' . $rowCount, $report->brief);
$rowCount++;
}
}
$spreadsheet->getActiveSheet()->setTitle('Report Title');
$spreadsheet->setActiveSheetIndex(0);
$export_filename = "report-".date('YmdHis').".xlsx";
\Illuminate\Support\Facades\Storage::disk('reports')->put($export_filename, $content);
$writer = new Xlsx($spreadsheet);
$writer->save($storage_path.$export_filename);
Mail::to(env('RPT_RECEIVER'))->send(new ReportsMail($storage_path.$export_filename, 'Report Name', date('F')));
exit;
}
在 congif/filesystem.php 文件中,在 "local" => [],
之后添加
'reports' => [
'driver' => 'local',
'root' => public_path().'/reports'
],
然后使用此代码
$filename = "report-".date('YmdHis').".xlsx";
\Illuminate\Support\Facades\Storage::disk('reports')->put($filename, $content);
在 Laravel 中正确的做法是将其保存在 storage
目录中。
您似乎在使用 PHPSpreadsheet 库。
我建议使用此代码保存 excel 文件:
$export_filename = "report-".date('YmdHis').".xlsx";
$writer = new Xlsx($spreadsheet);
$writer->save(storage_path("app/public/{$export_filename}));
Mail::to(env('RPT_RECEIVER'))->send(new ReportsMail($storage_path.$export_filename, 'Report Name', date('F')));
exit;
上面的代码会将 excel 文件保存在 storage/app/public
中
然后为了在 public 中访问文件,运行 命令:php artisan storage:link
。这将在您的 public
目录中创建一个符号链接(或快捷方式)storage
。
要访问文件,请使用此代码:
$file_url = asset('storage/sample.xlsx');
请记住,运行 还有 php artisan storage:link
生产服务器。
我在生产服务器中保存生成的 excel 文件时遇到了问题,我在 /public/reports
目录中设置了存储路径,如下所示:
$filename = "report-".date('YmdHis').".xlsx";
$storage_path = public_path('reports');
但是,文件不会保存在 reports
文件夹中,而是保存在 public
文件夹中,我试过
$storage_path = public_path().'\reports\';
但这将保存在 public 文件夹之外。
我是 laravel 的新手,如果有人能指出解决方法,我将不胜感激。
编辑
这是整个区块:
public function handle()
{
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->getStyle('C')->getAlignment()->setHorizontal('left');
$sheet->getColumnDimension('A')->setWidth(8);
$sheet->getColumnDimension('B')->setWidth(30);
$sheet->setCellValue('A1', 'title');
$sheet->setCellValue('B1', 'brief');
$reports = Report::get();
if(count($reports) > 0) {
$rowCount = 2;
foreach($reports as $report) {
$sheet->setCellValue('A' . $rowCount, $report->title);
$sheet->setCellValue('B' . $rowCount, $report->brief);
$rowCount++;
}
}
$spreadsheet->getActiveSheet()->setTitle('Report Title');
$spreadsheet->setActiveSheetIndex(0);
$export_filename = "report-".date('YmdHis').".xlsx";
\Illuminate\Support\Facades\Storage::disk('reports')->put($export_filename, $content);
$writer = new Xlsx($spreadsheet);
$writer->save($storage_path.$export_filename);
Mail::to(env('RPT_RECEIVER'))->send(new ReportsMail($storage_path.$export_filename, 'Report Name', date('F')));
exit;
}
在 congif/filesystem.php 文件中,在 "local" => [],
之后添加'reports' => [
'driver' => 'local',
'root' => public_path().'/reports'
],
然后使用此代码
$filename = "report-".date('YmdHis').".xlsx";
\Illuminate\Support\Facades\Storage::disk('reports')->put($filename, $content);
在 Laravel 中正确的做法是将其保存在 storage
目录中。
您似乎在使用 PHPSpreadsheet 库。
我建议使用此代码保存 excel 文件:
$export_filename = "report-".date('YmdHis').".xlsx";
$writer = new Xlsx($spreadsheet);
$writer->save(storage_path("app/public/{$export_filename}));
Mail::to(env('RPT_RECEIVER'))->send(new ReportsMail($storage_path.$export_filename, 'Report Name', date('F')));
exit;
上面的代码会将 excel 文件保存在 storage/app/public
然后为了在 public 中访问文件,运行 命令:php artisan storage:link
。这将在您的 public
目录中创建一个符号链接(或快捷方式)storage
。
要访问文件,请使用此代码:
$file_url = asset('storage/sample.xlsx');
请记住,运行 还有 php artisan storage:link
生产服务器。