1、应用场景
开发过程中,遇到这样的需求:需要将服务器上的图片展现在页面上,但是图片所在服务器不是对外的,图片所在服务器与应用服务器也不在同一台机器上,这时候就需要在开发中先将图片读出来,返回给应用服务器,应用服务器再对读取的图片进行处理,并展现。
一般,我们在struts2中我们都会通过两次请求,来获取图片,有一次的请求是专用来获取图片的流。
Struts的配置如下:
<result type="stream"> <param name="contentType">image/jpeg</param> <param name="inputName">inputStream</param> <param name="contentDisposition">filename="struts-gif.zip"</param> <param name="bufferSize">4096</param> </result>
现在我们使用新的方式来获取图片,并展示。
2、读取图片
(a) 首先我们先读取图片,并编码;
public static String getImageStr(String path){File file = new File(path);if(file.exists()){InputStream inputStream = null;byte[] data = null;try {inputStream = new FileInputStream(file);data = new byte[inputStream.available()];inputStream.read(data);inputStream.close();} catch (Exception e) {e.printStackTrace();} BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(data);} else {return null;}}
(b) 服务交互部分使用的是hessian,略
(c) 页面的展现:
<td align="center" height="120" width="20%">图片:</td><td height="24" width="40%" align="center"><img id="imgObj" width="96" height="118" alt="y" src="data:image/gif;base64,<s:property value="photoStr"/>"/></td>
开发中使用了Struts2,展现的时候我们只需要让图片的src等于图片的base64的编码即可,不过切记编码必须和data:image/gif;base64,一起