【问题标题】:Laravel storage path in production server生产服务器中的 Laravel 存储路径
【发布时间】:2019-09-04 01:20:26
【问题描述】:

我在生产服务器中保存生成的excel文件确实有问题,我确实在/public/reports目录中设置了存储路径,如下所示:

$filename = "report-".date('YmdHis').".xlsx";
$storage_path = public_path('reports');

但是,文件不会保存在reports 文件夹中,而是在public 文件夹中,我已经尝试过

$storage_path = public_path().'\reports\\';

但这将保存在公用文件夹之外。

我是 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;
}

【问题讨论】:

  • 你能提供完整的代码吗?生成的excel文件具体是怎么保存的?
  • 请在下方查看我的回答

标签: laravel path storage


【解决方案1】:

在 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

然后为了让文件可以公开访问,运行命令:php artisan storage:link。这将在您的 public 目录中创建一个符号链接(或快捷方式)storage

要访问该文件,请使用以下代码:

    $file_url = asset('storage/sample.xlsx');

记住,还要将php artisan storage:link 运行到生产服务器。

【讨论】:

    【解决方案2】:

    在 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);
    

    【讨论】:

    • @TheGrimmer,你必须分配变量$content,它将包含excel文件的值。请向我们提供您的完整代码,以便我们进一步帮助您。
    • @aceraven777 我编辑帖子放了一个完整的代码,你能帮忙吗?
    • 你用哪个包做excel?
    • 试试这个。将 $content 替换为 $writer
    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 2011-10-13
    • 2015-02-26
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 2021-10-20
    相关资源
    最近更新 更多