从数据库中将图像写入一个jsp
我正在尝试从数据库(保存为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 | Q ] Vd
!!&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" .... />
-
不幸的是,它不起作用。
您需要使用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; }