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 生产服务器。