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,一起