gpt4 book ai didi

symfony - 如何使用 Symfony 测试客户端检索流式响应(例如下载文件)

转载 作者:行者123 更新时间:2023-12-02 11:24:26 25 4
gpt4 key购买 nike

我正在使用 Symfony2 编写功能测试。

我有一个调用 getImage() 函数的 Controller ,该函数按如下方式传输图像文件:

public function getImage($filePath)
$response = new StreamedResponse();
$response->headers->set('Content-Type', 'image/png');

$response->setCallback(function () use ($filePath) {
$bytes = @readfile(filePath);
if ($bytes === false || $bytes <= 0)
throw new NotFoundHttpException();
});

return $response;
}

在功能测试中,我尝试请求带有Symfony test client的内容如下:

$client = static::createClient();
$client->request('GET', $url);
$content = $client->getResponse()->getContent();

问题是 $content 是空的,我猜是因为客户端一收到 HTTP header 就会生成响应,而不需要等待数据流传送。

有没有办法捕获流式响应的内容,同时仍然使用 $client->request() (甚至其他函数)将请求发送到服务器?

最佳答案

sendContent(而不是getContent)的返回值是您设置的回调。 getContent 实际上在 Symfony2 中只返回 false

使用sendContent,您可以启用输出缓冲区并将内容分配给您的测试,如下所示:

$client = static::createClient();
$client->request('GET', $url);

// Enable the output buffer
ob_start();
// Send the response to the output buffer
$client->getResponse()->sendContent();
// Get the contents of the output buffer
$content = ob_get_contents();
// Clean the output buffer and end it
ob_end_clean();

您可以阅读有关输出缓冲区的更多信息 here

StreamResponse 的 API 是 here

关于symfony - 如何使用 Symfony 测试客户端检索流式响应(例如下载文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15734677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com