2017-04-13 27 views
1

我保存在我的数据库我的图片,并用下面的代码MVC DATABSE图像的arent被缓存

var base64 = Convert.ToBase64String(image.Content); 
var imgSrc = String.Format("data:image/gif;base64,{0}", base64); 

<div class="img"> 
    <a><img src="@imgSrc"></a> 
</div> 

问题是获取他们,我每次刷新页面时,他们正在重新下载。我如何将它们存储在缓存中? 感谢

+2

如果使用[OutputCacheAttribute](https://msdn.microsoft.com/en-us/library/system.web.mvc.outputcacheattribute(v = vs.118).aspx)标记动作,并提供持续时间缓存响应,然后浏览器将缓存您的视图内容。 – mmushtaq

回答

0
<staticContent> 
<clientCache cacheControlMode="UseMaxAge" cacheControlMaxAge="365:00:00" /> 
</staticContent> 

添加在Web.config文件中这一行里面system.webServer静态内容缓存,并在行动中使用ETag过滤器。

希望这个缓存过程会帮助你。

1

Base64的图像不能由客户机浏览器缓存作为图像数据本身在src包埋,不同于资源可经由HTTP请求来请求。

方案A( “正常” 的形象):

  1. 加载在浏览器的页面
  2. 浏览器读取到的图像标签,并请求@ “SRC” 检索资源
  3. 网站服务器响应请求通过提供资源
  4. 浏览器渲染图像

方案B的(Base64图像):

  1. 加载在浏览器的页面
  2. 浏览器读取到的图像标签,并因为BASE64 数据已经描述图像应该怎么样子,浏览器高兴地使其而无需再次向Web服务器发送请求。

友情提示:您可以尝试通过保存页面,然后用鼠标右键单击“另存为...”,并观察输出。在另一个文件夹中,base64图像嵌入在html中,如数据本身,但不作为资源

P/S:@ mmushtaq提到的缓存方法是服务器端缓存,如果您通过ActionResult重试base64数据image.Content可能会很有用。