web-dev-qa-db-fra.com

Téléchargez des fichiers dans laravel avec Response :: download

Dans l'application Laravel, j'essaie de créer un bouton à l'intérieur de la vue qui permet à l'utilisateur de télécharger un fichier sans naviguer vers une autre vue ou routeMaintenant, j'ai deux problèmes: 

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

(2) Le bouton Télécharger ne doit pas diriger l’utilisateur vers n’importe où et plutôt simplement télécharger des fichiers sur une même vue. Mes paramètres actuels, acheminer une vue vers '/ télécharger'.

Voici comment j'essaie d'atteindre: 

Bouton:

  <a href="/download" class="btn btn-large pull-right"><i class="icon-download-alt"> </i> Download Brochure </a>

Route:

Route::get('/download', 'HomeController@getDownload');

Manette :

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

Essaye ça.

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"ne fonctionnera pas car vous devez donner un chemin physique complet.

Mise à jour 20/05/2016

Les utilisateurs Laravel 5, 5.1, 5.2 ou 5. * peuvent utiliser la méthode suivante à la place de la façade Response. Cependant, ma réponse précédente fonctionnera pour Laravel 4 ou 5. (la structure du tableau $header devient un tableau associatif =>- après la suppression de 'Content-Type' - si nous ne faisons pas ces modifications, les en-têtes seront ajoutés à mauvais sens: le nom de l'en-tête sera un numéro commençant à partir de 0,1, ...)

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

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

Dans la réponse acceptée, pour Laravel 4, le tableau d’en-têtes n’est pas construit correctement. Utilisation:

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

Les téléchargements de fichiers sont très simples dans Laravel 5.

Comme @Ashwani l'a mentionné, Laravel 5 permet à téléchargements de fichiers } avec response()->download() de renvoyer le fichier à télécharger. Nous n'avons plus besoin de jouer avec les en-têtes. Pour retourner un fichier, nous devons simplement:

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

depuis le contrôleur.


Route/contrôleur de téléchargement réutilisable

Nous allons maintenant créer un itinéraire et un contrôleur de téléchargement de fichiers réutilisables afin de pouvoir stocker tous les fichiers de notre répertoire public/files.

Créez le contrôleur:

php artisan make:controller --plain DownloadsController

Créez la route dans app/Http/routes.php:

Route::get('/download/{file}', 'DownloadsController@download');

Créer une méthode de téléchargement dans 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);
  }
}

Maintenant, déposez simplement certains fichiers dans le répertoire public/files et vous pouvez les serveur en liant à /download/filename.ext:

<a href="/download/filename.ext">File Name</a> // update to your own "filename.ext"

Si vous avez utilisé paquet HTML de Laravel Collective , vous pouvez utiliser la façade Html:

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

Un bon nombre de ces solutions suggèrent de référencer public_path () de l'application Laravel afin de localiser le fichier. Parfois, vous aurez envie de contrôler l'accès au fichier ou d'offrir une surveillance en temps réel du fichier. Dans ce cas, vous souhaiterez conserver le répertoire privé et limiter l'accès par une méthode dans une classe de contrôleur. La méthode suivante devrait aider avec ceci:

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

Vous pouvez également utiliser d'autres chemins, décrits à la page Documentation des fonctions d'aide de Laravel

3
Kirkland

En utilisant laravel 5, utilisez ce code car vous n’avez pas besoin d’en-têtes.

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

Si vous utilisez Fileentry, vous pouvez utiliser la fonction ci-dessous pour le téléchargement.

// 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

Je pense que tu peux utiliser 

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

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

Avec cela, vous êtes sûr que c'est un pdf.

2
Ariel Ruiz

// Essayez ceci pour télécharger n'importe quel fichier. laravel 5. *

// vous devez utiliser la façade "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

C'est une partie html 

 <a href="{{route('download',$details->report_id)}}" type="button" class="btn btn-primary download" data-report_id="{{$details->report_id}}" >Download</a>

C'est la route:

Route::get('/download/{id}', 'users\UserController@getDownload')->name('download')->middleware('auth');

C'est fonction: 

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