7
4

5 回答 5

5

不幸的是,它不起作用。

您需要使用 Spring MVC 控制器方法,它将您的图像作为 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>

然后使用你的控制器:

@RequestMapping("/getPhoto/{id}")
public @ResponseBody byte[] getPhoto(@PathVariable("id") final String id) throws IOException {
    byte[] imageBytes = dao.getImage(id);
    return imageBytes;
}
于 2013-02-15T17:43:48.650 回答
4

诀窍是让另一个 servlet 直接将数据输出到HttpServletResponse.getOutputStream(),正如 SuKu 所说,使用适当的内容类型。<img/>然后在您的 JSP 中,您只需指向您的图像 servlet 在标记中映射到的 URL 。例如,如果图像 servlet 映射到/imgServlet,您将使用类似这样的东西

<img src="imgServlet?img=myimage" ... />

试试这样的http://www.avajava.com/tutorials/lessons/how-do-i-return-an-image-from-a-servlet-using-imageio.html

于 2013-02-15T17:26:32.783 回答
0

这是一个与我正在研究的问题类似的问题。但是,我使用的是长轮询而不是 servlet。这是链接stackoverflow。

于 2014-04-09T17:11:42.970 回答
0

如果您喜欢使用 ModelAndView,另一种选择是创建一个自定义 View 对象,该对象设置媒体类型并将图像的字节输出到输出流。这样,您可以使用 ModelAndView 轻松设置重定向或返回正常错误,甚至在出现错误时返回 JSP 错误页面,例如找不到图像。

于 2013-02-15T20:10:38.000 回答
0
@RequestMapping(value="/imageDisplays/{imageId}")

public void getImage(@PathVariable int imageId,HttpSession session,HttpServletResponse response)  {
    OutputStream oImage;
    try{
            byte[] imageInByte = // get image in byte array
            response.setContentType("image/jpeg, image/jpg, image/png, image/gif");
            oImage=response.getOutputStream();
            oImage.write(imageInByte);
            oImage.flush();
            oImage.close(); 
    }catch(Exception e){
        LOGGER.debug("Request could not be completed at this moment. Please try again.");
        e.printStackTrace();
    }
    }

于 2013-12-10T05:26:26.543 回答