有一个aspx页面,URL中传入图片编号,然后从数据库中查询出图片在服务器的路径,使用
Response.BinaryWrite(bytes)或者Response.TransmitFile(filepath) 发送图片流。但是这种方式太慢,几K的图片需要1~2s才会展示,如果不用流的方式(直接写图片地址,只0.000几秒就可以了,但公司不允许将文件路径直接写在页面上。有什么方法可以对这种图片在客户端缓存吗?试过.net中的缓存方式,都不可以,使用httpwatch测试,都不会从缓存中取。

解决方案 »

  1.   

    楼主  这样子  <img src="/handler/imgHandler.ashx"  />在imgHandler的ProgressRequest方法里往响应流输出你的图片流
      

  2.   

    能说说理由为什么不直接从硬盘读取吗?在.net 4可以使用Cache或MemoryCache
    在.net 2.0可以用Cache读图片的byte[]保存到cache中,然后在ashx中去操作,先读cache,如果不存在则将byte[]加载到cache中,如果存在,将直接返回byte[]
      

  3.   

    之所以你找不到解决方法,是因为你不理解什么叫“客户端缓存”。只要稍微懂一些原理,就能解决这个问题。随便给你搜一下:http://www.google.com.hk/search?hl=zh-CN&lr=lang_zh-CN%7Clang_zh-TW&newwindow=1&safe=strict&rls=com.microsoft%3Aen-US%3AIE-Address&biw=1440&bih=844&tbs=lr%3Alang_1zh-CN%7Clang_1zh-TW&q=asp.net+304&oq=asp.net+304&aq=f&aqi=&aql=&gs_l=serp.3...3891.3891.0.4150.1.1.0.0.0.0.0.0..0.0...0.0.mbh4iDF8bRchttp://www.google.com.hk/search?hl=zh-CN&lr=lang_zh-CN%7Clang_zh-TW&newwindow=1&safe=strict&rls=com.microsoft%3Aen-US%3AIE-Address&biw=1440&bih=844&tbs=lr%3Alang_1zh-CN%7Clang_1zh-TW&q=http+get+304&oq=http+get+304&aq=f&aqi=&aql=&gs_l=serp.3...20265.24608.0.25498.6.6.0.0.0.0.0.0..0.0...0.0.lf1oCiXvUrg
      

  4.   

    对于客户端大量下载文件的应用,服务器返回304状态码的功能非常重要。例如客户端是基于地图瓦片的,那么用户在客户端随便拖动地图到世界任何地方,几秒钟内都会需要瞬间下载几百上千个小图片。而几乎全都在客户端有缓存。可是asp.net应用程序默认并不支持这个机制。你需要自己处理!