Bonjour a tous

J'utilise la lib guzzlehttp et je voudrais télécharger le fichier directement sur le navigateur du client, mais sans pour autant copier le fichier sur mon serveur

Ce code fonctionne, mais il importe le fichier au préalable sur le serveur, je voudrais savoir si il y aurait pas un autre moyen en utilisant une mémoire tampon ou autres

 $localFilePath = 'web/temp/'.$FileName;
        try {
            $response = $this->client->post($url, array(
                'headers' => array(
                    "Authorization" => $this->config->getToken()
                )
            ));
            if ($response->getBody()->isReadable()) {
                if ($response->getStatusCode() == 200) {
                    $file = $response->getBody()->getContents();
                    file_put_contents($localFilePath, $file);
                    header("Cache-Control: no-cache, must-revalidate");
                    header("Cache-Control: post-check=0,pre-check=0");
                    header("Cache-Control: max-age=0");
                    header("Pragma: no-cache");
                    header("Expires: 0");
                    header("Content-Type: application/force-download");
                    header('Content-Disposition: attachment; filename="' . $name . '"');
                    readfile($localFilePath);
                }
            }
        } catch (Exception $e) { 
            return $e->getMessage();
        }

2 réponses


Grafikart
Réponse acceptée

ben au lieu de l'écrire puis de le read, tu renvois directement son contenu

$file = $response->getBody()->getContents();
// On retire ça, ça ne sert à rien de rien
// file_put_contents($localFilePath, $file);
header("Cache-Control: no-cache, must-revalidate");
header("Cache-Control: post-check=0,pre-check=0");
header("Cache-Control: max-age=0");
header("Pragma: no-cache");
header("Expires: 0");
header("Content-Type: application/force-download");
header('Content-Disposition: attachment; filename="' . $name . '"');
echo $file; // On affiche le contenu du fichier, tout simplement
exit(); // On ne souhaite rien éxécuter derrière
driven78
Auteur
Réponse acceptée

Génial, tous simplement, j'hallucine d'avoir passer autant de temps, alors qu'il fallait juste faire un echo
Merci grafikart