7
4

5 に答える 5

5

残念ながら、それは機能しません。

画像をbyte[]としてHttpServletResponseクラスに書き込むSpringMVCControllerメソッドを使用する必要があります。

例:

@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はい、 Spring3.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;
}
于 2013-02-15T17:43:48.650 に答える
4

秘訣は、データを直接に出力する別のサーブレットをHttpServletResponse.getOutputStream()用意することです。SuKuが言うように、適切なコンテンツタイプを使用します。<img/>次に、JSPで、画像サーブレットがタグでマップされているURLをポイントするだけです。たとえば、イメージサーブレットがにマップされている/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

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 に答える
0

これは私が取り組んでいた質問と似た質問です。ただし、サーブレットの代わりにロングポーリングを使用していました。これがリンクstackoverflowです。

于 2014-04-09T17:11:42.970 に答える