如何在我的网站上编辑图像后清除图像缓存?

时间:2010-12-21 00:34:00

标签: c# asp.net

我正在使用外部页面来更新系统中的图像。当我被重定向回到我曾经工作的页面时,我仍然看到旧图片。在按ctrl + f5之前,我没有看到我的更改。他们以任何方式重定向历史记录删除或任何其他解决方案吗?

3 个答案:

答案 0 :(得分:11)

向图像源添加查询字符串,它将阻止浏览器缓存它。有些人使用日期,我更喜欢GUID

Guid g = Guid.NewGuid();
string GuidString = Convert.ToBase64String(g.ToByteArray());
GuidString = GuidString.Replace("=", "");
GuidString = GuidString.Replace("+", "");

Image1.ImageUrl = "/path/to/new/image.jpg?r=" + GuidString;

最终会使您的图像源看起来与此类似:

 <img src="/path/to/image.jpg?r=Vqad3W8ZUG6oXgFzZIw" id="Image1" runat="server" />

答案 1 :(得分:2)

刷新与否的决定取决于浏览器。解决此问题的标准技术是为图像添加时间戳。例如:

<img src='/images/foo.jpg?ts=1'/>

更新图像时,请发回:

<img src='/images/foo.jpg?ts=2'/>

浏览器将看到两个不同的URL并再次请求图像。您可以使用时间戳(文件的上次修改时间),文件内容的哈希值,递增的整数,...任何更改URL并强制浏览器重新加载的内容。

N.B。提供静态文件时,Web服务器将忽略查询字符串。因此,您不需要运行任何代码来实现此功能。此技术也适用于您希望强制刷新的任何内容,包括CSS,JS,......

答案 2 :(得分:0)

在C#中,有一种更简单的方法。您将bitmapimage CreateOptions设置为BitmapCreateOptions.IgnoreImageCache并强制图像从文件加载而不是使用现有缓存。

        var bi = new BitmapImage();

        StorageFile file = await StorageFile.GetFileFromPathAsync(filepath);
        const uint requestedSize = 400;
        const ThumbnailMode thumbnailMode = ThumbnailMode.PicturesView;
        const ThumbnailOptions thumbnailOptions = ThumbnailOptions.ResizeThumbnail;

        StorageItemThumbnail thumbnail = await file.GetThumbnailAsync(thumbnailMode, requestedSize, thumbnailOptions);

        bi.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
        bi.DecodePixelHeight = 200;
        bi.DecodePixelWidth = 200;
        bi.SetSource(thumbnail);
        return bi;