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

问题描述

我正在使用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);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...