`

JSP实现指定盘符路径下的图片显示

    博客分类:
  • Java
 
阅读更多

开发人员都知道<img src="">标签,只要src指定相应路径就能够显示图片,但是这里有一个限制条件:如果项目被部署在服务器上(比如Java web项目部署在tomcat下)运行时,src路径只能指定项目中的图片。比如<img src="/common/java.jpg">表示显示该项目下common目录下的名为java.jpg的图片。而如果你希望显示服务器某个盘符下的指定图片,比如<img src="c:\xxx\xx.jpg">,即使该目录下有指定图片,这样写也是找不到该图片的,因为出于安全性考虑不能读取当前项目以外的数据。

最近在做一个小项目玩,有个添加用户功能,我需要上传用户图片后在页面显示该用户图片。上传功能已实现,代码在这里可以看到:http://blessht.iteye.com/blog/1405057,为了防止图片丢失,我的图片是上传到硬盘指定目录下,现在的难题是如何把图片显示出来。

在网上看了很多解决方案,其中有一种方案我觉得很好:img标签的src不是图片路径,而是一个servlet请求,该servlet通过java代码读取图片并以流的形式将图片数据打印到页面,这样就能显示指定盘符下的图片了。

首先看下运行效果:




 

 

 

 

 

  • 实现说明
前面图显示很清楚:首先用户添加页面点击“上传”按钮显示上传界面,再指定相应图片点击上传,上传成功后关闭窗口并且将上传文件相应信息通过js回调函数的形式返回到父窗体。父窗体获取参数再通过jquery ajax的load方法加载一个jsp页面,该jsp页面实际只有一个<img>标签,用于显示图片,这样通过异步的形式就把指定图片找出来了。
首先是父窗体,用户添加页面的部分代码:
<script>

......

function openUpload_(){
	openUpload(null,'JPG,GIF,JPEG,PNG','5',callback);
}

/**
 * 回调函数,获取上传文件信息
 * realName真实文件名
 * saveName文件保存名
 * maxSize文件实际大小
 */
function callback(realName,saveName,maxSize){
	$("#photo_").val(saveName);
	$("#div_photo").load(root+"/showImage.jsp?saveName="+saveName+"&width_=200&height_=200");
}
</script>

......

<tr>
			<td>头像:</td>
			<td>
				<input type="hidden" name="photo" id="photo_"></input>
				<input type="button" onclick="openUpload_()" value="上传"/>
			</td>
		</tr>
		<tr>
			<td colspan="2">
				<div id="div_photo"></div>
			</td>
		</tr>
  然后是showImage.jsp的代码
<body>
<%
	String root = request.getContextPath();
	String saveName = request.getParameter("saveName");
	String width_ = request.getParameter("width_");
	String height_ = request.getParameter("height_");
%>
<img src="<%=root%>/CommonController.jhtml?method=showImage&saveName=<%=saveName%>" width="<%=width_%>" height="<%=height_%>">
</body>
  最后是CommonController类的showImage方法用于处理图片流数据:
/**
	 * 显示图片
	 * @param request
	 * @param response
	 * @return
	 * @throws ServletException
	 * @throws IOException
	 */
	public ModeAndView showImage(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String saveName = request.getParameter("saveName");
		
		FileInputStream hFile = new FileInputStream(fileUploadPro.getProperty("filePath")+saveName); // 以byte流的方式打开文件 d:\1.gif 
		int i=hFile.available(); //得到文件大小 
		byte data[]=new byte[i]; 
		hFile.read(data);  //读数据 
		response.setContentType("image/*"); //设置返回的文件类型 
		OutputStream toClient=response.getOutputStream(); //得到向客户端输出二进制数据的对象 
		toClient.write(data);  //输出数据 
		
		toClient.flush();
		toClient.close(); 
		hFile.close(); 
		return null;
	}
 
至此一个困扰我两天的问题终于解决了,目前还剩下一个错误就是:每次显示图片时会报一个错误:java.lang.IllegalStateException: getOutputStream() has already been called for this response,希望有解决方法的朋友指点一下,谢谢!另外还有什么好的办法,大家也可以分享一下!
注:目前上传显示图片在IE8下可用,其它浏览器不能保证。
  • 大小: 46.3 KB
  • 大小: 32.2 KB
  • 大小: 40.7 KB
  • 大小: 26.3 KB
分享到:
评论
2 楼 白糖_ 2014-04-11  
zhengyongqianluck 写道
在jsp页面中加入:
<%out.clear();
out = pageContext.pushBody(); %>
即可


噢,多谢,回头项目再用到了就试试
1 楼 zhengyongqianluck 2014-04-10  
在jsp页面中加入:
<%out.clear();
out = pageContext.pushBody(); %>
即可

相关推荐

    JS正确读取文件路径

    在 JSP 页面中,我们想要获取文件的路径,使用 JS 代码来实现该功能。然而,在 IE 浏览器中,却出现了问题,无法正确读取文件路径。网上搜索后发现,这是由于 IE8、9 的安全问题所引起的。 问题原因 在 IE9 下,...

    很好的jsp文件操作源码

    这部分代码展示了如何使用JSP创建目录并在指定路径下写入内容。 ##### 重点理解: 1. **创建目录**: - 定义要创建的目录路径(如`c:/aaa/`)。 - 创建`java.io.File`对象并使用`mkdir()`方法创建目录。 2. **...

    jsp-MVC.doc

    - 示例路径:`盘符:\工作空间名称\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\项目名\org\apache\jsp\jsps` - **MyEclipse**:通常位于Tomcat的`work`目录下。 - 示例路径:...

    java项目中的绝对路径和相对路径用法说明

    例如,如果你在项目中引用一个图片文件,相对路径可能是`images/logo.png`,这意味着从当前访问资源的路径开始查找`images`目录下的`logo.png`文件。在不同的场景中,相对路径的解释可能会有所不同。例如,如果在...

    初学者必看的文档JAVA开发入门

    例如,对于SQL Server 2005,需要将`sqljdbc.jar`文件放置在盘符的根目录下,并将其复制到JDK和JRE的`lib`目录下。 - **环境变量设置**: - `JAVA_HOME`: 指向JDK的安装路径,例如`D:\Program Files\Java\jdk1.5.0_...

    磁盘空间扩展

    磁盘空间扩展是指在Windows系统中,通过命令来完成指定路径下的空间扩展。这种方法可以解决OA系统中附件存储磁盘空间不足的问题。 首先,需要了解OA系统的附件存储机制。OA系统中的附件存储在..\mydomain\...

    电脑常用操作(Java开发方面的)

    这段代码监听键盘事件,当检测到用户按下F5键或其他指定组合键时,会阻止默认行为的发生。 ### 六、JavaScript控制图片缩放 **知识点描述:** 通过JavaScript可以实现网页中图片的鼠标滚轮缩放功能。 **详细解释...

    基于框架的Web开发-Tomcat和eclipseforjavaee配置.docx

    本文档旨在详细介绍如何在64位环境下安装并配置Tomcat、Eclipse for JavaEE以及JDK8,以实现Web应用程序的开发与测试。通过本教程的学习,您将能够熟练掌握这些工具的基本安装配置流程,为后续的Web应用开发打下坚实...

    eclipse基本配置-快捷键-svn合并

    7. **显示当前目录下的文件和子目录信息**:使用`dir`命令列出当前目录的内容。 8. **运行应用程序**:使用应用程序的完整路径加参数来启动程序,例如`D:\&gt;C:\windows\notepad.exe`。 9. **Javap+*.class**:使用`...

    win7下安装配置tomcat,java运行环境

    如果 WEB 项目放在其他盘符,则在 tomcat 目录/bin/文件夹下,编辑 server.xml 文档,在文档的末尾处,添加:&lt;Context path="/nala" docBase="e:\www\nala"&gt;&lt;/Context&gt;,其中,path 为访问标识,docBase 为实际项目...

    apache-tomacat-9.0.0.M26(网站建设软件包之tomcat安装包)

    2. **下载与安装**:下载Apache Tomcat的压缩包后,解压到指定目录,通常建议选择一个非系统盘符以避免权限问题。解压后,你可以通过bin目录下的startup.bat(Windows)或startup.sh(Unix/Linux)脚本来启动Tomcat...

    打war包命令

    - `cd` 和 `g:`:这两条命令分别用于改变当前目录到盘符`G:`下的某个位置。实际操作时,需要根据实际情况替换为具体的路径。 - `cd G:\WebService\WebService\htdocs`:这条命令将当前工作目录切换到了`G:\...

    2021-2022计算机二级等级考试试题及答案No.9983.docx

    24. **DOS命令**:在DOS环境下,命令`MD \USER\XY\P\X\Y`可以创建多级子目录,而其他选项可能会导致错误,如RD命令用于删除目录,MD命令创建单级目录,且路径前应有当前盘符。 25. **内存垃圾回收**:垃圾回收机制...

    java入门之java简介(PDF)

    在命令行操作方面,JDK安装测试通常涉及使用cmd进入DOS系统,通过盘符命令进入到指定的硬盘,dir命令查看当前目录内容,cd命令切换到目标文件夹,cd..返回上一级目录。Java命令则用于显示当前安装的Java版本信息,...

    2021-2022计算机二级等级考试试题及答案No.3239.docx

    - **绝对路径与相对路径**:题目中的路径为绝对路径,从盘符开始,明确指出文件所在的具体位置。 ### 2. 微型计算机的“32位” 题目中提到的“32位微型计算机”,这里的“32”指的是计算机的机器字长。 - **知识点...

    fso浏览54646465465464564

    &lt;tr&gt;&lt;th width="10%"&gt;盘符&lt;/th&gt;&lt;th width="15%"&gt;类型&lt;/th&gt;&lt;th width="20%"&gt;卷标&lt;/th&gt;&lt;th width="15%"&gt;文件系统&lt;/th&gt;&lt;th width="20%"&gt;总容量&lt;/th&gt;&lt;th width="20%"&gt;可用空间&lt;/th&gt;&lt;/tr&gt; On Error Resume Next Is...

Global site tag (gtag.js) - Google Analytics