当我们初学IMG标签时,我们知道通过设置img标签的src属性,能够在页面中显示想要展示的图片。其中src的值,可以是磁盘目录上的绝对,也可以是项目下的相对路径,还可以是网络上的图片路径。在存取少量图片的情况下,采用相对路径存储图片的情况下最方便,也最实用。但是当图片数量过多时,这种方式就显的有些掣肘了。


   当系统的图片数量过多时,如果仍把这些图片当做项目的一部分去发布,势必会大大延长项目的发布时间及更新时间。对于某些对于时限性要求特别高的系统来说,采用相对路径存储图片就是不可取的。特别是系统发布补丁时,只能采用增量的方式去更新系统。如果采用覆盖的方式发布系统,就可能会造成系统图片文件的丢失。


   基于以上种种原因,很多系统会把大量的图片存在服务器的固定目录下,这样搭建集群环境时,就能访问公共的资源,避免对硬盘空间的浪费,但是问题也就在这里出现了。我们发布好的系统访问磁盘上的固定目录下的图片时,出现了没有权限访问的提示。系统为了保证本地安全,不允许直接访问图片。


   咋一看,上面的问题有的不可思议。但仔细想想,系统这么做,也确实有道理的。在服务器上,部署了很多个系统应用。不可能有一个系统的访问权限,就可以随随便便的访问磁盘上的文件。事实上,服务器上的系统是有权限读取其它磁盘路径下的文件,只是没有办法让它显示而已。


   要解决上面的问题,我们可以使用流的方式把图片读取出来,然后再输出显示到HTML页面中。f废话了半天,下面关键的实现代码:


   JSP页面的展示代码:

<           img            name           =           "person.personImg"            id           =           "personImg"            alt           =           "头像照片"            src           =           "${person.personImg}"            style           =           "width:160px;height:160px;border:1px solid"            />          


           <           button            id           =           "btnImg"            class           =           "btn btn-primary"            type           =           "button"            title           =           "上传图片"                $(function() {          


                      //读取头像照片          


                      if($("#oid").val()!=="")          


                      {          


                      $("#personImg").attr("src","favccxx/person/loadUserPhoto?           externalPerson.oid           =           "+$("           #oid").val()+"&Time="+(new Date().getTime()));          


                      $("#personImg").css("display","");          


                      $("#btnImg").css("display","");          


                      }else{          


                      $("#personImg").css("display","none");          


                      $("#btnImg").css("display","none");                 


                      }          


                      }          


           </script>

   

   采用Struts2框架的java代码:

@Action           (value =            "loadUserPhoto"           , results = {            @Result           (name =            "success"           , type =            "stream"           , params = {          


                      "contentType"           ,            "image/jpeg"           ,            "inputName"           ,            "imageStream"            }) })          


                      public            String getImage() {          


                      if            (person.getOid() !=            null           ) {          


                      // 设置图片          


                      try            {          


                      Person person = personService.findOne(           "oid"           , externalPerson.getOid());          


                      FileInputStream is =            new            FileInputStream(person.getPersonImg());          


                      imageStream =            new            BufferedInputStream(           new            FileInputStream(person.getPersonImg()));          


                      }            catch            (Exception e) {          


                      }          


                      }          


                      return            SUCCESS;          


                      }

   


本文转自 genuinecx 51CTO博客,原文链接:http://blog.51cto.com/favccxx/1282451,如需转载请自行联系原作者