Java读取本地文件(图片),并显示在JSP文件中
2017-10-16 20:45
447 查看
转载:http://genuinecx.blog.51cto.com/2890523/1282451
当我们初学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;
}
当我们初学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;
}
相关文章推荐
- Java读取本地文件,并显示在JSP文件中
- Java读取本地文件,并显示在JSP文件中
- java 通过流的方式读取本地图片并显示在jsp 页面上(类型以jpg、png等结尾的图片)
- 详解Java读取本地文件并显示在JSP文件中
- java 通过流的方式读取本地图片并显示在jsp 页面上(类型以jpg、png等结尾的图片)
- java读取本地图片并在jsp中显示
- Java读取本地文件,并显示在JSP文件中
- Servlet从本地文件中读取图片,并显示在页面中
- JAVA读取MongoDB中的二进制图片并在jsp中显示
- JAVA读取本地文件并显示到页面中
- jsp向页面显示图片,找不到文件时直接使用java画图
- 读取本地图片显示在JSP页面上
- FileReader:读取本地图片文件并显示
- input file文件上传(multiple)及FileReader:读取本地图片文件并显示
- 把图片文件存入oracle数据库 然后读取并显示在jsp页面
- FileReader:读取本地图片文件并显示
- FileReader:读取本地图片文件并显示
- FileReader:读取本地图片文件并显示
- java以Blob形式存储,读取图片并在jsp页面显示图片流
- java读取本地图片并在网页显示