I have a function which is converting my blade view into Excel format and downloading it. Now I want to save it in a specified location, i.e: public/uploads/release Here is my controller:
public function export_release()
{
return Excel::download(new ReleaseExportView(), 'release.xlsx');
}
This function downloads the excel file downloads folder. I want to save it in the location: public/uploads/release
Here is my route:
Route::Get('outbounds/export_release' ,'outboundController@export_release')->name('outbounds.export_release');
Advertisement
Answer
You can use the store
method to store the file in the filesystem.
From the docs:
Exports can easily be stored on any filesystem that Laravel supports.
Default disk
public function storeExcel()
{
// Store on default disk
Excel::store(new InvoicesExport(2018), 'invoices.xlsx');
}
Custom disk
public function storeExcel()
{
// Store on a different disk (e.g. s3)
Excel::store(new InvoicesExport(2018), 'invoices.xlsx', 's3');
// Store on a different disk with a defined writer type.
Excel::store(new InvoicesExport(2018), 'invoices.xlsx', 's3', Excel::XLSX);
}
Now ideally you would store the file in storage/app/public/uploads/release
and create a symlink from public/storage/
to storage/app/public
as explained here.
But if you really want to store it in public/uploads/release
you could create new custom disk in config/filesystems.php
. Something like:
'real_public' => [
'driver' => 'local',
'root' => public_path(),
'url' => env('APP_URL'),
'visibility' => 'public',
],
Then you could use the custom disk to store the file:
public function export_release()
{
Excel::store(new ReleaseExportView(), 'uploads/release/release.xlsx', 'real_public');
}