图片的另一种展现—将后台图片编码直接展现为图片

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

原文地址:https://www.cnblogs.com/kakag/p/3470083.html