BS中以流的方式读取图片如何做缓存

gavinwwl 2012-06-14 08:45:31
有一个aspx页面,URL中传入图片编号,然后从数据库中查询出图片在服务器的路径,使用
Response.BinaryWrite(bytes)或者Response.TransmitFile(filepath) 发送图片流。

但是这种方式太慢,几K的图片需要1~2s才会展示,如果不用流的方式(直接写图片地址,只0.000几秒就可以了,但公司不允许将文件路径直接写在页面上。

有什么方法可以对这种图片在客户端缓存吗?试过.net中的缓存方式,都不可以,使用httpwatch测试,都不会从缓存中取。
...全文
286 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
gavinwwl 2012-06-20
  • 打赏
  • 举报
回复
谢谢大家,解决了。用304状态。
  • 打赏
  • 举报
回复
对于客户端大量下载文件的应用,服务器返回304状态码的功能非常重要。例如客户端是基于地图瓦片的,那么用户在客户端随便拖动地图到世界任何地方,几秒钟内都会需要瞬间下载几百上千个小图片。而几乎全都在客户端有缓存。

可是asp.net应用程序默认并不支持这个机制。你需要自己处理!
代码小天王 2012-06-14
  • 打赏
  • 举报
回复
客户端浏览器是自动有缓存的 只要你的路径是同样的路径 那么是不会被重新请求的
[Quote=引用 5 楼 的回复:]

原因是公司不让,我也没办法
楼上说的是在服务器缓存,能不能在客户端缓存?
[/Quote]
gavinwwl 2012-06-14
  • 打赏
  • 举报
回复
原因是公司不让,我也没办法
楼上说的是在服务器缓存,能不能在客户端缓存?
  • 打赏
  • 举报
回复
能说说理由为什么不直接从硬盘读取吗?

在.net 4可以使用Cache或MemoryCache
在.net 2.0可以用Cache

读图片的byte[]保存到cache中,然后在ashx中去操作,先读cache,如果不存在则将byte[]加载到cache中,如果存在,将直接返回byte[]
代码小天王 2012-06-14
  • 打赏
  • 举报
回复
客户端浏览器是有缓存的。。。。。。。
[Quote=引用 2 楼 的回复:]

我就是这样写的,我的问题是这样显示图片如何缓存?
[/Quote]
gavinwwl 2012-06-14
  • 打赏
  • 举报
回复
我就是这样写的,我的问题是这样显示图片如何缓存?
代码小天王 2012-06-14
  • 打赏
  • 举报
回复
楼主 这样子

<img src="/handler/imgHandler.ashx" />

在imgHandler的ProgressRequest方法里往响应流输出你的图片流

62,267

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧