使用新cfimage不会刷新会话变量

时间:2011-09-09 17:29:21

标签: coldfusion cfimage

至少对我来说,这是一个奇怪的。我正在将图像读入cf图像变量并将其保存为会话变量:

<cfimage action="read" source="myPath/image.jpg" name="myImage" />
<cfset session.image = #myImage# />

我计划在某个时刻操纵该图像,这就是我将它保存到变量的原因。无论如何,然后我用cfcontent:

流式传输它
<img id="photoPlaceholder" src="/#application.root_name#/administration/PhotoManagement/displayPhoto.cfm" width="500px" />

来自模板displayPhoto.cfm:

<cfcontent  variable="#imageGetBlob(session.image)#" />

这是问题所在。在第一次调用之后,无论将哪个新图像传递给它,都会显示第一个检索到的图像。我已经尝试在cfimage标记之前销毁会话变量,并且我已经验证我每次都传递正确的图像变量。显示新图像的唯一方法是刷新页面。

在我看来,cfimage以某种方式缓存图像,并且每次调用它都不会刷新变量myImage。 CF文档没有说明这一点,谷歌没有提出任何建议。

思想?

2 个答案:

答案 0 :(得分:3)

您的问题可能是客户端问题。由于img标记中的URL不会更改(... displayPhoto.cfm),因此您的浏览器看不到您实际指向新图像,因此它一直在提供缓存中的图像。

您可以尝试在src属性的末尾添加一个随机假参数,类似于这个伪代码:

<img id="photoPlaceholder" src="/#application.root_name#/administration/PhotoManagement/displayPhoto.cfm?somevar=#aUniqueValue#" width="500px" />

您可以从随机数生成器或时间戳生成器创建aUniqueValue变量。

答案 1 :(得分:2)

您还可以在displayPhoto.cfm中设置HTTP标头,告诉浏览器不要缓存该URL的内容格式。从理论上讲,这可能会更好,否则浏览器会在每次给出稍微不同的URL时保留缓存图像。这可能不是一个真实世界关注的桌面,其中缓存很大而不是按网站分段,但缓存有限的移动客户端可能会清除您想要缓存的其他内容。

如果图片很大或相同版本可能会被大量加载,请查看HTTP标头,否则上面的方法很好(我们在我工作的应用程序中同时使用)