我一直在编写一个网络应用程序一段时间,并且在提供图像方面遇到了一些问题。
我的代码使用 ,从服务器中提取文件数据file_get_contents
,并使用 Slim 的Request
对象write
方法输出文件的内容,设置标题。对于大多数文件,这是可行的,但是较大的图像通常只显示图像尺寸的灰色轮廓(在移动和桌面 Chrome 中测试)。Requests error out with ERR_SPDY_PROTOCOL_ERROR
,这让我相信这是一个 HTTP 2 问题(我测试的服务器侦听 HTTP 2 连接,使用listen [port] http2
其 nginx 配置中的指令设置),但是我试图降级响应中使用的 HTTP 版本使用 PSR-7 的RequestInterface
方法withProtocolVersion
并没有改变。
我知道使用file_get_contents
然后输出所述内容是一种非常迂回的做事方式,但这是我知道允许此应用程序的用户任意设置上传文件的位置的唯一方法。
这是我的代码中最相关的部分,其中$filepath
是用户请求的文件的路径。此代码对除大图像之外的所有文件都按预期工作。
return $response->withHeader('Content-Type', mime_content_type($filepath))->write(file_get_contents($filepath));