问题描述
例如:用户信息,有一个头像,在数据库是流的形式存储,其他一些字段。我现在的做法是,读取成model,然后绑定页面。头像再做一次请求,返回MVC里的File显示。但是图片一多,显示起来就很慢。我有两个想法:1,用辅助方法,但是怎么都想不出怎么返回。2,把图片存储成文件,但是第二次打开页面依然要重新存储。还是很消耗性能,我在想能不能做个图片对比,如果图片相同,不再存储。但是图片对比好像更麻烦。有没有什么方法提高效率!
解决方案
解决方案二:
asp.net默认不支持http304状态机制,因此它这方面是不太行的。你需要自己在输出图片时在消息头中写入特定的内容,在下一次获取图片时判断是否要直接返回304状态(而不是输出图片)。如果你觉得研究写上这20行代码比较费精神,那么你可以就简单地把图片放在网站的目录下。在页面上,应该使用http://......./images/892389998.jpg这样的地址下载。而不通过你的asp.net程序。因为IIS等web服务都是自动支持它的!下载图片太慢,是因为你得asp.net程序写的不好,你没有支持304状态。
解决方案三:
要看一下图片有没有自动优化,你应该使用一个http调试器来查看你的网页的消息。(不会使用http器,怎们称得上是专业的程序员呢?)然后,如果你对网页执行“刷新”,你会看到所有的图片请求url的response都是304状态,而不是200状态。这就对了!
解决方案四:
publicclassResponseImg:IHttpHandler{staticreadonlyDateTimeRefresh;staticreadonlyDateTimeNow;staticResponseImg(){Now=DateTime.Now;Refresh=Now.AddMonths(1);}publicvoidProcessRequest(HttpContextcontext){if(!string.IsNullOrEmpty(context.Request.Headers["If-Modified-Since"])){DateTimeIfModifiedSince=DateTime.Parse(context.Request.Headers["If-Modified-Since"]);if(IfModifiedSince>Now){context.Response.StatusCode=304;return;}}//stringfolder=context.Request.QueryString["Folder"];stringfilepath=context.Request.QueryString["FilePath"];intwidth=int.Parse(context.Request.QueryString["Width"]);intheight=int.Parse(context.Request.QueryString["Height"]);stringhex=context.Request.QueryString["Hex"];stringpath=context.Server.MapPath(string.Format("/Img/{0}",filepath));byte[]bytes=ImageHelper.Reset(path,width,height);//System.Drawing.Imageimg=ImageHelper.Reset(bytes,width,height);context.Response.Headers["Last-Modified"]=Refresh.ToString();//context.Response.Cache.SetExpires(DateTime.Now.Add(Refresh));//context.Response.Cache.SetMaxAge(refresh);context.Response.Cache.SetCacheability(HttpCacheability.Public);context.Response.CacheControl=HttpCacheability.Public.ToString();context.Response.Cache.SetValidUntilExpires(true);//context.Response.StatusCode=304;//img.Save(context.Response.OutputStream,ImageHelper.GetImageFormat(path));context.Response.ContentType="image/"+hex;context.Response.BinaryWrite(bytes);}如sp1234所说~~~我给出实例代码