繁体   English   中英

如何使用 guzzle 下载文件并将其转发到响应而不在本地保存

[英]How to download file using guzzle and forward it to response without saving locally

我正在使用 Laravel 并且我想从 api 获取文件(提供令牌和一些标头),然后将其直接转发到响应而不在本地保存文件。

目前我正在这样做:

$response = $client->get($requestUrl, [
        'query' => [
            'hash' => $hash
        ],
        'headers' => [
            '_token_' => $oauthConfig['api_token'],
            '_token_issuer_' => 1
        ],
        'stream' => true,
    ]);

    $type = $response->getHeader('Content-Type')[0];
    $body = $response->getBody();

    $response = new StreamedResponse(function () use ($body) {
        while (!$body->eof()) {
            echo $body->read(1024);
        }
    });

    $response->headers->set('Content-Type', $type);

    return $response;

但我得到了这个例外:

LogicException
The content cannot be set on a StreamedResponse instance.

非常感谢任何帮助/指导。 谢谢。

似乎正确的做法是

http://docs.guzzlephp.org/en/stable/psr7.html

use GuzzleHttp\Stream\Stream;



$response = $client->get($requestUrl, [
        'query' => [
            'hash' => $hash
        ],
        'headers' => [
            '_token_' => $oauthConfig['api_token'],
            '_token_issuer_' => 1
        ],
        'stream' => true,
    ]);

$result = '';
while(!$response->getBody()->eof()){
   $result .= $response->getBody()->read(8192);
}

$filename = 'test.gif';
return response()->streamDownload(function () use ($result) {
    echo $result;
}, $filename);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM