从数据库中将图像写入一个jsp

发布于 2021-02-02 11:24:20

我正在尝试从数据库(保存为BLOB)将图像写入jsp。我正在使用spring并且在我的控制器中,我确实有图像字节[]。

所以我正在这样做

byte[] imageBytes = dao.getImage(cc);

model.setAttribute("myimage", new String(imageBytes));

在我的jsp中,我有

<img src=data:image/jpg;base64,"<c:out value='${myimage}'/>" alt="my image" />

但是我在jsp页面中只能看到ascii字符(如下所示)。

K &w: =5 )^- O? R ?z i \ M ? 1 ????] ?, Z ?I? P?? ? z~~?v ?k lM’s ?E .Q。 ]
a?h e /? ;k ] W ?c ??E .. Q ] ??曲?〜 - ?L z?Z :?6 ?? z = a? + e ‘ 5 ???? ``?C
… || w.v?y?-?U ?? ?D?D.?gg ݭ)?A ?? 7 $ ?????????]] .. ] S ? BO ?L e z h gzn
?. E.E .........)?>T m z h t U| E}?K >
T | Q ] Vd


?Q_ ?G E A A *wz i(sh?U ^ b?z?〜v m Z i。 q?ULf%.L.z。〜?v.o.z.i
!!&F.VϨ ? K。?u޵ u?Vxx?。?ѯ 。 ......> W. [cֻKt ??? ??)e?b }M.? g.?h ѯA/? J e。( 。
3 ?

我什至尝试将byte []转换为ByteArrayOutputStream并使用Base64对其进行编码,但是没有用

model.addAttribute("image", Base64.encode(imageBytes));

但是,当我使用FileOutputStream将byte []写入文件(myimage.jpg)时,我确实看到使用老式方法在jsp中显示的图像

<img src="../images/myimage.jpg" .... />

关注者
0
被浏览
84
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    不幸的是,它不起作用。

    您需要使用Spring MVC Controller方法,该方法会将您的图像作为byte []写入HttpServletResponse类。

    例:

    @RequestMapping("/getImage/{id}")
    public void getImage(HttpServletResponse response,@PathVariable("id") final String id) throws IOException {
        response.setContentType("image/jpeg");
        byte[] imageBytes = dao.getImage(id);
        response.getOutputStream().write(imageBytes);
        response.getOutputStream().flush();
    }
    

    然后在客户端上使用html代码:

    <img src="getImage/222" ... />
    

    更新: 是的,您可以@ResposneBody从Spring 3.1开始使用批注进行操作

    注册你的 ByteArrayHttpMessageConverter

    <mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>image/jpeg</value>
                        <value>image/png</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
    

    然后使用yout控制器:

    @RequestMapping("/getPhoto/{id}")
    public @ResponseBody byte[] getPhoto(@PathVariable("id") final String id) throws IOException {
        byte[] imageBytes = dao.getImage(id);
        return imageBytes;
    }
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看