如果中间件请求接口返回是数据流时,这时没法直接将数据流直接输出到响应体的data中,需要在中间件中直接将文件下载下来
代码如下:
$response = HttpUtil::request($urlInfo, $paramsData, $method, $header, $returnBody);//文件流 $header = [ 'Content-Type' => 'application/octet-stream', 'Content-Disposition' => 'attachment; filename="' . rawurlencode('反馈列表.xlsx') . '"', ]; return response($response)->withHeaders($header);
备注:文件名如果涉及到中文,需要转义以后可以,否则下载文件名称乱码
附:urlencode和rawurlencode区别
urlencode:是一种将字符串进行编码的函数,主要用于将字符串转换为 URL 编码格式。它将字符串中的特殊字符(如空格、中文等)转换为%加上字符的 ASCII 码十六进制表示形式。这种编码方式在将数据作为 URL 的一部分进行传递时非常有用,比如在GET请求的查询字符串中。
rawurlencode:同样是用于 URL 编码的函数。它的主要目的也是对字符串进行编码,使其能够安全地用于 URL 中。与urlencode不同的是,它在编码时遵循 RFC 3986 标准,对于一些字符的编码方式更为严格和规范。