web-dev-qa-db-fra.com

Puzzle 6 Fichier de téléchargement

Besoin d'aide à l'aide de l'ordule 6 pour télécharger un fichier à partir d'une API de repos. Je ne veux pas que le fichier soit enregistré localement mais que vous téléchargez à partir du navigateur Web. Code jusqu'à présent ci-dessous, mais croyez que je manque quelque chose?

    <?php

//code for Guzzle etc removed

$responsesfile = $client->request('GET', 'documents/1234/content', 
        [
        'headers' => [
            'Cache-Control' => 'no-cache', 
            'Content-Type' => 'application/pdf',
            'Content-Type' => 'Content-Disposition: attachment; filename="test"'
        ]
        ]


    );
    return $responsesfile;
    ?>
6
Kevin Lindmark

Faites des recherches à l'intérieur des documents de guilit, par exemple ici

Passez une chaîne pour spécifier le chemin d'accès à un fichier qui stockera le contenu de l'organisme de réponse:

$client->request('GET', '/stream/20', ['sink' => '/path/to/file']);

Passez une ressource renvoyée de Fopen () pour écrire la réponse à A PHP Stream:

$resource = fopen('/path/to/file', 'w');
$client->request('GET', '/stream/20', ['sink' => $resource]);

Passez un objet PSR\http\Message\Streaminterface pour diffuser le corps de réponse à un flux PSR-7 ouvert.

$resource = fopen('/path/to/file', 'w');
$stream = GuzzleHttp\Psr7\stream_for($resource);
$client->request('GET', '/stream/20', ['save_to' => $stream]);
3
Chris

Tout d'abord, Content-Type L'en-tête n'a de sens que lorsque vous envoyez quelque chose (post/mis), mais pas pour obtenir des demandes.

Deuxièmement, quel est votre problème? Le plafond par défaut ne stocke pas le corps de réponse (fichier) quelque part, vous pouvez donc travailler avec lui dans votre application, comme $responsesfile->getBody().

0
Alexey Shokov