让浏览器在Laravel中显示图像的缓存副本(生成PHP)

时间:2020-04-09 09:53:09

标签: php laravel

努力寻找答案,在stackoverflow上查看了其他类似问题,但这些解决方案无效。

我设置了显示图像的路线。基本上,它尝试从我的digitalocean空间(S3存储桶)中获取URL,然后显示它。问题是,即使设置了正确的缓存头,浏览器也不知道使用缓存副本。

这是“流式处理”文件的代码部分:

                $disk = 'do_spaces';
                $url = Storage::disk($disk)->url($directory.'/'.$fileName);

                $secondsToCache = 86400;
                $ts = gmdate("D, d M Y H:i:s", time() + $secondsToCache) . " GMT";
                $lm = gmdate("D, d M Y H:i:s", time()) . " GMT";

                return response()->stream(function () use ($url) {
                    return readfile($url);
                },200, [
                    //'status' => 304,
                    'Content-Type' => $mimeType,
                    'Pragma' => 'cache', //cache or no-cache
                    'Expires' => $ts, //set expiration date
                    'Last-Modified' => $lm,
                    'Cache-Control' => 'max-age='.$secondsToCache //"no-cache, must-revalidate, no-store, max-age=0, private",
                ]);

每当我直接访问图像时,刷新时它将使用缓存的副本。当我访问我的路线(通过php生成的图像)​​时,不会缓存。

我曾经尝试检查$_SERVER['HTTP_IF_MODIFIED_SINCE'],但是当我打印可用的$ _SERVER变量时,它永远都没有,所以我不能简单地发送304响应来告诉浏览器使用缓存的副本。

为什么我不直接链接到图像?主要是因为我想将图像URL定向到我的网站,而不是digitalocean url(当然,如果使用php进行交付,图片会产生过多的开销,然后我可以切换为直接网址,但对我来说这是不得已的选择。)

感谢任何想法或建议,谢谢!

0 个答案:

没有答案