gpt4 book ai didi

java - Play框架和图像缓存

转载 作者:行者123 更新时间:2023-11-30 04:55:50 25 4
gpt4 key购买 nike

我的模板中有一些这样的代码:

#{list people, as:'person'}
<img src="@@{Application.image(person.id)}">
#{/list}

启动 Play 服务器后,列表会多次显示第一个图像。例如,如果 people 变量包含 id 1, 2, 3, 4, 5 - 那么将显示五个图像,但它们都是相同的图像:与 id 1 对应的图像。

如果我点击刷新,图像将根据其 ID 全部更改为唯一。从模板渲染的 html 如下所示:

<img src="http://url/application/image?personId=1"/>
<img src="http://url/application/image?personId=2"/>
<img src="http://url/application/image?personId=3"/>
<img src="http://url/application/image?personId=4"/>
<img src="http://url/application/image?personId=5"/>

如何阻止模板第一次显示相同的图像?

编辑:还尝试在响应 src 请求的 Controller 中调用 renderBinary(image) 之前添加下面看到的响应 header :

...
response.setHeader("Pragma-directive", "no-cache");
response.setHeader("Cache-directive", "no-cache");
response.setHeader("Cache-control", "no-cache");
response.setHeader("Pragma", "no-cache");
response.setHeader("Expires", "0");
renderBinary(imageFile);

根据this邮政。它实际上在前几次有效,但在停止并启动 Play 服务器后的第三次,我遇到了相同的缓存问题,尽管 personId 不同,但所有图像都显示相同的图像。我还将时间戳附加到网址末尾,但没有任何运气。

编辑#2:我还尝试将 application.conf 中的 http.cacheControl 属性更改为 0:

http.cacheControl=0

但它再次给我提供了不一致的结果,无论它显示的是正确还是错误的图像。

最佳答案

我能想到的两个选项:

  1. 生成一个唯一的编号并将其作为无用参数附加到图像的 URL 中。例如,“http://url/application/image?personId=1&ts=12314125123”。由于每次生成页面时都会更改 URL,因此浏览器不会访问缓存,并且每次都会请求图像。通常时间戳作为参数效果最好。

  2. 找到一些方法,在提供图像时将“Cache-Control”HTTP 响应 header 参数设置为“no-cache”。如果您使用自定义 servlet 来传输图像,这应该非常简单。如果没有,我不确定您如何做到这一点,但也许 Play 提供了一种方法。

过去,我通常使用选项 1,因为它几乎总是容易得多。贫民窟,但它有效。

关于java - Play框架和图像缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8584308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com