Jsp中图片显示问题以及显示绝对路径图片问题
Jsp中图片显示问题
最近项目中,有图片上传的情况,要求:保存路径存储在配置文件中,放在系统绝对路径下,命名方式:path/image/分类/imageName。
过程中,分类目录使用的是中文路径,一直没有想到因为中文路径会导致图片不显示,在查看图片时,一直都显示404,找不到资源,但是明显路径没有问题,图片也确实存在,害的本人头疼好久,突然发现显示图片的路径中,中文被编码成一串字符,难道是因为路径包涵中文?在线搜索,发现确实有这种情况,所以试了一下,结果成功显示。
解决方法:
在tomcat中设置中文路径:tomcat中server.xml文件中的connector部分:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>
在其中添加一个属性:URIEncoding=”utf-8”。此处编码和网页编码相同。如:
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="utf-8"/>
可以显示图片。究其原因,在html,jsp页面中,引用了带汉字的图片或者目录,形如
这样,如果没有在tomcat配置URIEncoding属性,则无法显示。
Jsp中显示绝对路径图片
1.使用servlet存储图片,将servlet当做img的src来显示。如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); response.setContentType("image/jpeg"); //设置图片格式格式,这里可以忽略 FileInputStream fis = null; OutputStream os = null;try { fis = new FileInputStream(imagePath);//图片路径os = response.getOutputStream();int count = 0; byte[] buffer = new byte[1024*1024]; while ( (count = fis.read(buffer)) != -1 ) os.write(buffer, 0, count); } catch (IOException e){ e.printStackTrace(); }finally { try {if (os != null) {os.close();}if (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}}
}
这是servlet的方法,然后在jsp页面的img标签的src设置为访问该servlet即可。
2.另一种方式,在使用springmvc这样的框架时,如果我要添加一个servlet,个人觉得没有什么必要,那么就在jsp页面中的img的src中设置访问路径,如下:
"imgdis" alt="图片显示" src="${ctx }//showImage?id=${image.id}">
此时在请求url对应方法中添加类似servlet中的doPost方法相应方法即可。例如:
public void showImage(HttpServletResponse response, String imagePath) {response.setContentType("text/html; charset=UTF-8");// response.setContentType("image/jpeg"); // 设置图片格式格式,这里可以忽略FileInputStream fis = null;OutputStream os = null;try {fis = new FileInputStream(imagePath);os = response.getOutputStream();int count = 0;byte[] buffer = new byte[1024 * 1024];while ((count = fis.read(buffer)) != -1)os.write(buffer, 0, count);} catch (IOException e) {e.printStackTrace();} finally {try {if (os != null) {os.close();}if (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}}}
这样绝对路径的图片就可以被显示了。
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
