Maison  >  Article  >  développement back-end  >  Comment lancer des téléchargements forcés de fichiers dans Symfony2 ?

Comment lancer des téléchargements forcés de fichiers dans Symfony2 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-23 13:16:02521parcourir

How to Initiate Forced File Downloads in Symfony2?

Forcer les téléchargements de fichiers dans Symfony2

Lors de la gestion des événements de clic de l'utilisateur sur les liens de téléchargement, l'objectif est d'inviter l'utilisateur à enregistrer un fichier. Cependant, dans Symfony2, les tentatives de lancement de téléchargements de fichiers conduisent souvent à des résultats indésirables.

Une approche consiste à spécifier manuellement les en-têtes de la réponse :

<code class="php">    $response = new Response();
    $response->headers->set('Content-type', 'application/octect-stream');
    $response->headers->set('Content-Disposition', sprintf('attachment; filename="%s"', $filename));
    $response->headers->set('Content-Length', filesize($filename));</code>

Cependant, cette approche peut entraîner le téléchargement boîte de dialogue affichant une taille de fichier de 0 octet.

L'inclusion de l'en-tête Content-Transfer-Encoding peut résoudre ce problème :

<code class="php">        $response->headers->set('Content-Transfer-Encoding', 'binary');
        $response->setContent(readfile($filename));</code>

Cependant, cela génère parfois un flux de caractères illisibles.

Une méthode alternative consiste à utiliser la fonction setContent avec la fonction file_get_contents() :

<code class="php">    $response->setContent(file_get_contents($filename));</code>

Cette approche peut conduire à une erreur PHP liée à la limite de mémoire.

Pour Pour éviter ces problèmes, envisagez d'utiliser la classe BinaryFileResponse :

<code class="php">use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\ResponseHeaderBag;

$response = new BinaryFileResponse($file);
$response->setContentDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT);</code>

Cette solution est simple et sans effort, facilitant le comportement de téléchargement de fichiers souhaité.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn