从数据库中将图像写入一个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
?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" .... />
问题答案:
不幸的是,它不起作用。
您需要使用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;
}