发送图片作为响应无法正常工作

时间:2019-05-06 11:46:53

标签: image httpresponse lumen

这段fc代码的工作原理很简单:

public static function File($relativeFilePath) {
        if (Storage::exists($relativeFilePath) == false) {
            $relativeFilePath = "/not_found.png";
        }
        $absoluteDiskPath = Storage::disk('local')->getDriver()->getAdapter()->getPathPrefix();
        $fullPath = $absoluteDiskPath.$relativeFilePath;
        $file = File::get($fullPath);
        $contentType = File::mimeType($fullPath);
        $response = response()->make($file, 200);
        $response->header("Content-Type", $contentType);
        return $response;

    }

现在,不是发送图像而是发送了错误的文件。 PHP找到图像的存储位置,然后发送图像的内容(执行var_dump将在邮递员中弹出文件内容)。

但实际上显示出一个白色小方块。

我被困住了。更新了流明,从先前的提交中恢复了代码(正在工作),并且仍然相同)。在屏幕截图中,您可以看到结果。

存储文件夹上的权限为777,以避免出现权限问题。 如果我将图像添加到公共根文件夹,然后直接访问它(HTTP服务器而不是整个Lumen框架),则会显示该图像。 我的HTTP服务器在流浪汉上是nginx

Image view

更新

我从答案中删除了标题,其内容显示在邮递员中。尽管如此,我还是用十六进制打开它来比较两个原始文件:

响应在开头添加了一个奇怪的0x0A值。

Weird 0x0A

怎么办?

2 个答案:

答案 0 :(得分:0)

我猜图像的内容有问题,您遇到了错误。您没有看到错误,因为它试图将其显示为图像,但显示不是很成功,导致显示空白图像。

我建议您注释以下这一行:$response->header("Content-Type", $contentType);,这样就可以返回原始结果。我的猜测是有一个错误,然后您可以修复/继续调试。
当然,当您完成操作后,就可以再次取消注释

答案 1 :(得分:0)

此问题是由于PHP文件开头的空白行引起的。

问题解决了。