将图像写入数据库中的jsp

mi3*_*mi3 7 java jsp spring-mvc

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

所以我这样做

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 charcaters(如下所示).

K_&W:???= 5)^ - Øř滋*\*M 1 ??] ?,Z?我?P 450ž〜v· K + LMS?如参见]一个?他/ ?; k]的W'C吗?如参见] ?? ?????曲〜 - LZ Z:6 ?? Z = A + E'5 ??? ?C. |?WVý - ?? U·Λd克ݭ)A 10 7 $ ????] ??] S 3 BO?Lezhgzn? ? ?E . ?. ] < eOO ?S ?? . ] ? '? ? ?E ? ` ] ֻD ??? \?} U}? > T m z h t U| E}?K > T | Q ] Vd ? Q? G E A ? ˰*wz i(sh? U^ b? z ~?v m Z i q ULF%LZ〜vozi;?!?&FVϨķü޵ü?? VXXѯ? > W [çֻ的Kt ?????)在线2 b} M·G·hѯA/?济( 3?

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

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

但是,当我写使用FileOutputStream中以一个文件(myimage.jpg)字节[],我看到用老式方法的图像显示在我的JSP

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

dan*_*nik 5

不幸的是它不起作用.

您需要使用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();
}
Run Code Online (Sandbox Code Playgroud)

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

<img src="getImage/222" ... />
Run Code Online (Sandbox Code Playgroud)

更新:是的,你可以@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>
Run Code Online (Sandbox Code Playgroud)

然后使用你的控制器:

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