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'); }