Сохранение PhpSpreadSheet с помощью кнопки нажмите

Я пытаюсь получить мое приложение Laravel для загрузки файла excel с phpSpreadSheet продолжение PhpExcel. Но пока мне не везет. Сначала я попытался сделать вызов Axios через onClick, но это не сработало, так как JS не разрешено сохранять вещи. После этого я попытался прикрепить кнопку к действию Laravel, это просто открыло пустую страницу.

Я не знаю, сможет ли кто-нибудь здесь помочь мне, но я буду надеяться

1 ответов


сначала вам нужно установить конечную точку в ваших маршрутах, чтобы вызвать ее с помощью ajax (axios в вашем случае):

Route::get('spreadsheet/download',[
   'as' => 'spreadsheet.download', 
   'uses' => 'SpreadsheetController@download'
]);

в вашем контроллере:

public function download ()
{
    $fileContents = Storage::disk('local')->get($pathToTheFile);
    $response = Response::make($fileContents, 200);
    $response->header('Content-Type', Storage::disk('local')->mimeType($pathToTheFile));
    return $response;
}

если у вас нет файла, вы можете сохранить его в php: / / output:

public function download ()
{
    $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, "Xlsx");
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment; filename="file.xlsx"');
    $writer->save("php://output");
}

теперь вам просто нужно вызвать конечную точку /spreadsheet/download чтобы начать загрузку, но нормальный <a href="/spreadsheet/download">Download</a> будет работать.

надеюсь, это поможет вам.