在下面的代码段中,$file
数组的内容将在浏览器中呈现。
代码有效但我认为必须有更好的方法将二进制字符串转换为流以发送到浏览器。
if (is_array($file)) {
$filename=preg_replace('/[^A-Za-z0-9 \\._-]+/', '', $file['filename']);
// -- This feels like a hack
$stream = fopen('php://memory', 'r+');
fwrite($stream, $file['content']);
rewind($stream);
// --
return $response->withHeader('Content-Type', $file['mimetype'])
->withHeader('Content-Transfer-Encoding', 'binary')
->withHeader('Content-Disposition', 'inline; filename="' . basename($filename) . '"')
->withHeader('Expires', '0')
->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
->withHeader('Pragma', 'public')
->withBody(new \Slim\Http\Stream($stream));
}
将内容转换为流的正确方法是什么?
答案 0 :(得分:0)
使用Response
对象的getBody()
方法解决了问题。
if (is_array($file)) {
if (strlen($file['filename'])) {
$filename=preg_replace('/[^A-Za-z0-9 \\._-]+/', '', $file['filename']);
}
$content = $response->getBody();
$content->write($file['content']);
return $response->withHeader('Content-Type', $file['mimetype'])
->withHeader('Content-Transfer-Encoding', 'binary')
->withHeader('Content-Disposition', 'inline; filename="' . basename($filename) . '"')
->withHeader('Expires', '0')
->withHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0')
->withHeader('Pragma', 'public');
}