这里有一个奇怪的例子,至少对我来说是这样。我正在将图像读入cf image变量,并将其保存为session变量:
<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标记之前销毁会话变量,并且验证了每次都传递了正确的image变量。显示新图像的唯一方式是刷新页面。
在我看来,cfimage以某种方式缓存了图像,每次对它的新调用都不会刷新变量myImage。CF文档对此只字不提,google也什么也没提出来。
有什么想法?
发布于 2011-09-10 01:33:54
您的问题可能是客户端的问题。由于img标记中的URL没有更改(...displayPhoto.cfm),因此浏览器看不到您实际上指向的是一个新图像,因此它继续提供缓存中已有的图像。
您可以尝试在src属性的末尾添加一个随机化的伪参数,如下所示:
<img id="photoPlaceholder" src="/#application.root_name#/administration/PhotoManagement/displayPhoto.cfm?somevar=#aUniqueValue#" width="500px" />您可以从随机数生成器或时间戳生成器创建aUniqueValue变量。
发布于 2011-09-10 03:47:29
您还可以在displayPhoto.cfm中设置HTTP头,告诉浏览器不要缓存来自该URL的内容。从理论上讲,这可能会更好,否则浏览器将在缓存中保存图像,因为每次给它一个略有不同的URL。在缓存很大且不按站点划分的桌面上,这可能不是一个现实问题,但缓存有限的移动客户端可能会清除您希望缓存的其他内容。
如果图片很大或者相同的版本可能会加载很多,请查看HTTP头文件,否则上面的方法就可以了(我们在我工作的应用程序中都使用了这两种方法)
https://stackoverflow.com/questions/7365275
复制相似问题