时间:2022-03-04
问题:
ThinkPHP6响应输出图片,直接在浏览器显示,非下载文件
解决方法:
public function getQrCode()
{
$app_id = config('miniprogram.app_id');
$app_secret = config('miniprogram.app_secret');
$m_wx = Wxmini::getInstance($app_id, $app_secret);
$scene = 'uid=1';
$page = 'pages/index/index';
//获取微信小程序码, 返回的图片 Buffer
$wx_mini_qrcode = $m_wx->getQrCodeStreamUnlimited($scene, $page);
//响应给浏览器直接可以展示
//第一种a:使用助手函数response, 直接在响应头参数中设置
return response($wx_mini_qrcode, 200, ['Content-Length' => strlen($wx_mini_qrcode), 'Content-Type' => 'image/png']);
//第一种b:使用助手函数response, Response类中有contentType接口可以调用
return response($wx_mini_qrcode, 200, ['Content-Length' => strlen($wx_mini_qrcode)])->contentType('image/png');
//第二种:用header函数指定响应头后echo输出
/**
* 注意不能使用 return 去替换 echo,
* return后框架response类接管, 然后直接使用默认的Content-Type:text/html输出会导致你在浏览器看到一堆乱
* 看着有种header函数设置是无效的错觉
*/
↑↑↑注意↑↑↑注意↑↑↑注意↑↑↑
header("Content-Type: image/png; charset=utf-8");
echo $wx_mini_qrcode;
exit;
}
TP框架默认响应的是text/html
Response类中contentType接口