In der Laravel-Anwendung versuche ich, eine Schaltfläche in der Ansicht zu erhalten, mit der der Benutzer Dateien herunterladen kann, ohne zu einer anderen Ansicht oder Route zu navigieren. Jetzt habe ich zwei Probleme: (1) unten: Funktionsauslösung
The file "/public/download/info.pdf" does not exist
(2) Die Schaltfläche "Herunterladen" sollte den Benutzer nicht zu einem beliebigen Ort navigieren, sondern nur Dateien in derselben Ansicht herunterladen, Meine aktuellen Einstellungen, und eine Ansicht an "/ download" weiterleiten.
Hier ist, wie ich versuche zu erreichen:
Taste:
<a href="/download" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> Download Brochure </a>
Route :
Route::get('/download', 'HomeController@getDownload');
Controller:
public function getDownload(){
//PDF file is stored under project/public/download/info.pdf
$file="./download/info.pdf";
return Response::download($file);
}
quelle
return Response::download($pathToFile);
Das Herunterladen von Dateien ist in Laravel 5 sehr einfach .
Wie @Ashwani erwähnte, ermöglicht Laravel 5 das Herunterladen von Dateien mit
response()->download()
dem Zurückgeben von Dateien zum Herunterladen. Wir müssen uns nicht mehr mit Headern herumschlagen. Um eine Datei zurückzugeben, gehen wir einfach wie folgt vor:return response()->download(public_path('file_path/from_public_dir.pdf'));
aus dem Controller heraus.
Wiederverwendbare Download Route / Controller
Jetzt erstellen wir eine wiederverwendbare Dateidownloadroute und einen Controller, damit wir jede Datei in unserem
public/files
Verzeichnis auf den Server bringen können .Erstellen Sie den Controller:
Erstellen Sie die Route in
app/Http/routes.php
:Route::get('/download/{file}', 'DownloadsController@download');
Download-Methode erstellen in
app/Http/Controllers/DownloadsController
:class DownloadsController extends Controller { public function download($file_name) { $file_path = public_path('files/'.$file_name); return response()->download($file_path); } }
Legen Sie jetzt einfach einige Dateien im
public/files
Verzeichnis ab und Sie können sie durch Verknüpfen mit/download/filename.ext
:<a href="/download/filename.ext">File Name</a> // update to your own "filename.ext"
Wenn Sie das HTML-Paket von Laravel Collective eingezogen haben, können Sie die HTML-Fassade verwenden:
{!! Html::link('download/filename.ext', 'File Name') !!}
quelle
In der akzeptierten Antwort ist für Laravel 4 das Header-Array falsch aufgebaut. Verwenden:
$headers = array( 'Content-Type' => 'application/pdf', );
quelle
Einige dieser Lösungen schlagen vor, auf public_path () der Laravel-Anwendung zu verweisen, um die Datei zu finden. Manchmal möchten Sie den Zugriff auf die Datei steuern oder eine Echtzeitüberwachung der Datei anbieten. In diesem Fall möchten Sie das Verzeichnis privat halten und den Zugriff durch eine Methode in einer Controller-Klasse beschränken. Die folgende Methode sollte dabei helfen:
public function show(Request $request, File $file) { // Perform validation/authentication/auditing logic on the request // Fire off any events or notifiations (if applicable) return response()->download(storage_path('app/' . $file->location)); }
Es gibt auch andere Pfade, die Sie verwenden können. Diese sind in der Dokumentation zu den Hilfsfunktionen von Laravel beschrieben
quelle
laravel 5
Verwenden Sie diesen Code bei der Verwendung, da Sie keine Header benötigen.return response()->download($pathToFile);
.Wenn Sie verwenden
Fileentry
, können Sie die folgende Funktion zum Herunterladen verwenden.// download file public function download($fileId){ $entry = Fileentry::where('file_id', '=', $fileId)->firstOrFail(); $pathToFile=storage_path()."/app/".$entry->filename; return response()->download($pathToFile); }
quelle
Fileentry
ist eine andere Funktion, die für diese Frage nicht benötigt wird. Antwort bearbeiten und ich werde wegen der Erwähnung von LV5s upvotenresponse()->download()
.Ich denke, dass Sie verwenden können
$file= public_path(). "/download/info.pdf"; $headers = array( 'Content-Type: ' . mime_content_type( $file ), );
Damit sind Sie sicher, dass es sich um ein PDF handelt.
quelle
// Versuchen Sie dies, um eine beliebige Datei herunterzuladen. Laravel 5. *
// Sie müssen die Fassade "use Illuminate \ Http \ Response;" verwenden.
public function getDownload() { //PDF file is stored under project/public/download/info.pdf $file= public_path(). "/download/info.pdf"; return response()->download($file); }
quelle
HTML link click <a class="download" href="{{route('project.download',$post->id)}}">DOWNLOAD</a> // Route Route::group(['middleware'=>['auth']], function(){ Route::get('file-download/{id}', 'PostController@downloadproject')->name('project.download'); }); public function downloadproject($id) { $book_cover = Post::where('id', $id)->firstOrFail(); $path = public_path(). '/storage/uploads/zip/'. $book_cover->zip; return response()->download($path, $book_cover ->original_filename, ['Content-Type' => $book_cover->mime]); }
quelle
Dies ist ein HTML-Teil
<a href="{{route('download',$details->report_id)}}" type="button" class="btn btn-primary download" data-report_id="{{$details->report_id}}" >Download</a>
Dies ist Route:
Route::get('/download/{id}', 'users\UserController@getDownload')->name('download')->middleware('auth');
Das ist Funktion:
public function getDownload(Request $request,$id) { $file= public_path(). "/pdf/"; //path of your directory $headers = array( 'Content-Type: application/pdf', ); return Response::download($file.$pdfName, 'filename.pdf', $headers); }
quelle
Wenn Sie die JavaScript-Download-Funktion verwenden möchten, können Sie dies auch tun
<a onclick=“window.open(‘info.pdf) class="btn btn-large pull-right"><i class="icon-download-alt"> </i> Download Brochure </a>
Denken Sie auch daran, die Datei info.pdf in Ihr öffentliches Verzeichnis Ihres Projekts einzufügen
quelle
Sie können einfach in Ihrem Controller verwenden:
return response()->download($filePath);
Happy Coding :)quelle
HTML href Link klicken:
<a ="{{ route('download',$name->file) }}"> Download </a>
In der Steuerung:
public function download($file){ $file_path = public_path('uploads/cv/'.$file); return response()->download( $file_path); }
Auf der Route:
Route::get('/download/{file}','Controller@download')->name('download');
quelle