wake-up-neo.com

Herunterladen von Dateien in Laravel mit Response :: download

In der Laravel-Anwendung versuche ich, eine Schaltfläche in der Innenansicht zu erstellen, mit der der Benutzer die Datei herunterladen kann, ohne zu einer anderen Ansicht oder Route zu navigieren Jetzt habe ich zwei Probleme: (1) unterhalb der Funktionsausgabe 

The file "/public/download/info.pdf" does not exist

(2) Die Download-Schaltfläche sollte den Benutzer nicht zu einem beliebigen Ort navigieren, sondern nur Dateien in derselben Ansicht herunterladen. Meine aktuellen Einstellungen. Routing einer Ansicht zu "/ download".

So versuche ich 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', 'HomeC[email protected]');

Controller:

public function getDownload(){
        //PDF file is stored under project/public/download/info.pdf
        $file="./download/info.pdf";
        return Response::download($file);
}
49
star18bit

Versuche dies.

public function getDownload()
{
    //PDF file is stored under project/public/download/info.pdf
    $file= public_path(). "/download/info.pdf";

    $headers = array(
              'Content-Type: application/pdf',
            );

    return Response::download($file, 'filename.pdf', $headers);
}

"./download/info.pdf" wird nicht funktionieren, da Sie den vollständigen physischen Pfad angeben müssen.

Update 20.05.2016

Laravel 5, 5.1, 5.2 oder 5. * Benutzer können anstelle von Response facade die folgende Methode verwenden. Meine vorherige Antwort wird jedoch sowohl für Laravel 4 als auch für 5 funktionieren. (Die Struktur des $header-Arrays ändert sich in das assoziative Array =>- der Doppelpunkt, nachdem 'Content-Type' gelöscht wurde. Wenn Sie diese Änderungen nicht vornehmen, werden die Header hinzugefügt falscher Weg: Der Name der Kopfzeile wird mit einer Nummer von 0,1, ... beginnen.

$headers = [
              'Content-Type' => 'application/pdf',
           ];

return response()->download($file, 'filename.pdf', $headers);
115
Anam

In der akzeptierten Antwort für Laravel 4 ist das Header-Array falsch aufgebaut. Benutzen:

$headers = array(
  'Content-Type' => 'application/pdf',
);
26
sebt

Dateidownloads sind in Laravel 5 sehr einfach.

Wie von @Ashwani erwähnt, erlaubt Laravel 5 Dateidownloads mit response()->download(), die Datei zum Herunterladen zurückzugeben. Wir müssen uns nicht länger mit Kopfzeilen beschäftigen. Um eine Datei zurückzugeben, müssen wir einfach:

return response()->download(public_path('file_path/from_public_dir.pdf'));

aus dem Controller heraus.


Wiederverwendbare Download-Route/Controller

Lassen Sie uns nun eine wiederverwendbare Route und einen Controller für das Herunterladen von Dateien erstellen, sodass wir alle Dateien in unserem Verzeichnis public/files speichern können.

Erstellen Sie den Controller:

php artisan make:controller --plain DownloadsController

Erstellen Sie die Route in app/Http/routes.php:

Route::get('/download/{file}', '[email protected]');

Downloadmethode in app/Http/Controllers/DownloadsController erstellen:

class DownloadsController extends Controller
{
  public function download($file_name) {
    $file_path = public_path('files/'.$file_name);
    return response()->download($file_path);
  }
}

Nun werden einfach einige Dateien im Verzeichnis public/files abgelegt, 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 Laravel Collective's Html-Paket abgerufen haben, können Sie die Html-Fassade verwenden:

{!! Html::link('download/filename.ext', 'File Name') !!}
24
DutGRIFF

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 sollten Sie das Verzeichnis privat halten und den Zugriff durch eine Methode in einer Controller-Klasse einschrä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 ebenfalls verwenden können, beschrieben auf Laravel's Helper-Funktionsdokumentation

3
Kirkland

Verwenden Sie bei der Verwendung von laravel 5 diesen Code, da Sie keine Header benötigen.

return response()->download($pathToFile);.

Wenn Sie Fileentry verwenden, können Sie die unten stehende 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);           
}
3
Ashwani Panwar

Ich denke, dass du verwenden kannst 

$file= public_path(). "/download/info.pdf";

$headers = array(
        'Content-Type: ' . mime_content_type( $file ),
    );

Damit stellen Sie sicher, dass es sich um ein pdf handelt.

2
Ariel Ruiz

// Versuchen Sie dies, um eine Datei herunterzuladen. Laravel 5. *

// Sie müssen Fassade verwenden "use Illuminate\Http\Response;" 

public function getDownload()
{

//PDF file is stored under project/public/download/info.pdf

    $file= public_path(). "/download/info.pdf";   

    return response()->download($file);
}
2
rohit ramani

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 die Route:

Route::get('/download/{id}', 'users\[email protected]')->name('download')->middleware('auth');

Dies 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);      
}
0
Rishi