php - 如何使用 guzzle 下载文件并将其转发到响应而不在本地保存
问题描述
我正在使用 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);
推荐阅读
- scala - 继承标量下的方差
- firefox - 是否可以在 WebAssembly 中编写 WebExtension?
- java - Idea intellij 不导入库[包括图片]
- html - 计算 Django 模板中的项目
- python - IDLE 和 PyCharm ModuleNotFoundError 中的 Python newb MacOS:没有名为“nltk”的模块
- c - GCC 无法包含指定了 -l 选项的标头
- javascript - html dom 目标元素
- javascript - 遍历 XML HTML 对象时获取数字?
- c# - 当“值不在预期范围内”时如何确定哪个参数出错
- sql-server - 存储过程 If 语句