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();
}
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
Génial, tous simplement, j'hallucine d'avoir passer autant de temps, alors qu'il fallait juste faire un echo
Merci grafikart