Spring MVC: How to return image in @ResponseBody?


I'm getting image data (as byte[]) from DB. How to return this image in @ResponseBody ?

EDIT

I did it without @ResponseBody using HttpServletResponse as method parameter:

@RequestMapping("/photo1")
public void photo(HttpServletResponse response) throws IOException {
    response.setContentType("image/jpeg");
    InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
    IOUtils.copy(in, response.getOutputStream());
}

Using @ResponseBody with registeredorg.springframework.http.converter.ByteArrayHttpMessageConverter converter as @Sid said doesn't work for me :(.

@ResponseBody
@RequestMapping("/photo2")
public byte[] testphoto() throws IOException {
    InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
    return IOUtils.toByteArray(in);
}
share|improve this question

In addition to registering a registerByteArrayHttpMessageConverter, you may want to use a ResponseEntity instead of @ResponseBody. The following code works for me :

@RequestMapping("/photo2")
public ResponseEntity<byte[]> testphoto() throws IOException {
    InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");

    final HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.IMAGE_PNG);

    return new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
}
share|improve this answer

In your application context declare a AnnotationMethodHandlerAdapter and registerByteArrayHttpMessageConverter:

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
  <property name="messageConverters">
    <util:list>
      <bean id="byteArrayMessageConverter" class="org.springframework.http.converter.ByteArrayHttpMessageConverter"/>
    </util:list>
  </property>
</bean> 

also in the handler method set appropriate content type for your response.

share|improve this answer
It doesn't work for me. Details above. – marioosh Jun 6 '11 at 11:37
It doesn't work for me – jsf Oct 25 '12 at 17:02
@jsinghfoss refer to the top answer. – Peymankh Oct 26 '12 at 13:28

By using Spring 3.1.x and 3.2.x, this is how you should do it:

The controller method:

@RequestMapping("/photo2")
public @ResponseBody byte[] testphoto() throws IOException {
    InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
    return IOUtils.toByteArray(in);
}

And the mvc annotation in servlet-context.xml file:

<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>
share|improve this answer

if you are using Spring version of 3.1 or newer you can specify "produces" in @RequestMappingannotation. Example below works for me out of box. No need of register converter or anything else if you have web mvc enabled (@EnableWebMvc).

@ResponseBody
@RequestMapping("/photo2", method = RequestMethod.GET, produces = MediaType.IMAGE_JPEG_VALUE)
public byte[] testphoto() throws IOException {
    InputStream in = servletContext.getResourceAsStream("/images/no_image.jpg");
    return IOUtils.toByteArray(in);
}
share|improve this answer




출처 - http://stackoverflow.com/questions/5690228/spring-mvc-how-to-return-image-in-responsebody





Posted by linuxism
,

php - array

Development/PHP 2013. 6. 19. 17:14


"array_push" 함수는 기존에 선언된 배열의 가장 뒷 부분에

새로운 값을 추가하기 위해서 사용되는 함수이다.


아래는 간단한 사용 예이다.


  1. <?php  
  2.     $list_data = array("book1""book2");  
  3.   
  4.     // 배열에 "book3" 추가  
  5.     array_push($list_data"book3");  
  6.   
  7.     // 배열에 "book4" ~ "book5" 추가  
  8.     array_push($list_data"book4""book5");  
  9.   
  10.     // 출력  
  11.     print_r($list_data);  
  12. ?>  


출처 - http://bitwizx.tistory.com/entry/PHP-%EB%B0%B0%EC%97%B4Array-%EC%A0%95%EC%9D%98-%EB%B0%8F-%EA%B0%92-%EC%B6%94%EA%B0%80-arraypush

'Development > PHP' 카테고리의 다른 글

php - eclipse debugging  (0) 2015.06.04
php - eclipse zend debugger plugin install  (0) 2015.06.03
php - foreach 문  (0) 2013.06.19
php - 유용한 함수  (0) 2013.05.23
php - 기본 문법  (0) 2013.05.17
Posted by linuxism
,

php - foreach 문

Development/PHP 2013. 6. 19. 13:58


제목 : PHP 내공올리기 강좌 1 : foreach 사용법

글쓴넘 : 위경섭

저작권 : 위경섭

 

이 글은 글쓴넘과 저작권을 표시하여 배포 가능함다 !!!

--

 

foreach 사용법

 

우선 foreach 문법의 prototype 을 보자

 

1. foreach (array_expression as $value) statement

첫번째 사용법은 배열의 첨자를 무시하고 값만을 사용하고 싶을때 사용한다.

 

이런배열이 있다고 가정해 보자

 

$my_arr[0] = "apple";

$my_arr[5] = "orange";

$my_arr[15] = "pineapple";

 

이 배열을 출력하는 일반적인 for 문을 구성해보자.

 

for($i=0;$i<=15;$i++)

{

    if( $my_arr[$i] != "") echo $my_arr[$i];

}

 

세개의 내용을 표시하기위해 15번의 루프를 돈다. 이걸 foreach 로 바꿔보자.

 

foreach($my_arr as $fruit)

{

    echo $fruit;

}

 

이 문장은 세개의 과일을 표시하기위해 정확히 세번만 돈다..

 

2. foreach (array_expression as $key => $value) statement

 

이제 좀더 파워풀한 두번째 사용법을 보자.

 

위의 예를 그대로 써서...

 

foreach($my_arr as $idx => $fruit)

{

    echo "INDEX : $idx, fruit : $fruit";

}

 

두번째의 경우는 PHP에 존재하는(다른언어에도 있을랑가 모르겠지만...) 문자열첨자르 사용할 경우 아주 유용하다.

 

// 설정값 저장용 배열

$my_cnf["version"] = "1.5";

$my_cnf["appname"] = "My Application";

$my_cnf["Author"] = "위경섭";

 

foreach($my_cnf as $keyName => $value)

{

    echo "$keyName = $value";

}

 

이제 아주 유용한 실전 예제를 한번 만들어보자..

 

문)

내가 호스팅받는 계정이 보안상의 이유로 PHP register global 을 off 해놨다.

그래서 내가만든게시판의 action 파일에 있는 $subject 등을 $_POST["subject"] 로 바꿔서

써야한다. 근데 이게 일이 넘 많다!.. 이걸 일일이 안바꾸고 해결할 방법이 있겠는가 ?

 

답)

일단 $_POST 의 특성을 보자...

 

$_POST 는 웹페이지에서 <form method=post ...> 했을때 폼태그 내에있는 양식(input,select 등등) 의 값이 넘어오는 배열이다. PHP의 register global 이 on 되어있으면 PHP가 자동으로 해당변수의 이름으로 매핑해준다. 하지만 off 이면 $_POST["name속성명"] 으로 참조해야한다.

 

그다음 PHP의 참조변수 기능을보자.

 

$fruit = "apple";

$apple = "이것은 사과";

echo $$fruit; // "이것은 사과" 를 출력함..

 

변수명을 문자열로 사용할 수 있다..즉

$apple === $$fruit 인 것이다..

 

이제 $_POST 배열안의 각변수들을 실제 변수로 만들어보자

 

foreach($_POST as $key => $value)

{

    $$key = $value;

}

 

끝났다...이제 register global=off 상태에서도 내가 폼을 통해넘긴 변수를 register global on 일때 처럼 사용할 수 있다.

 

$$key = $value;

 

$key 에는 $_POST 배열의 첨자가 온다.

 

$_POST["subject"] = "나의 게시물";

 

여기서 "subject" 가 $key 에 "나의 게시물" 이 $value 에 들어간다.

 

위에서 설명한 변수참조 기능에서

$$key -->  $"subject" 가 되고($subject 변수가 생성된다) 여기에 $value를 넣으므로

 

$subject = $value;

 

이런 결과가 되어

 

$_POST["subject"] = "나의 게시물";

 

이 문장에서 아래의 문장이 실행된다.

 

$subject = "나의 게시물";

 

이렇게 해서 폼에서 넘긴 name=subject 폼이 $subject 로 사용가능하게 된다.

 


출처 - http://jobdahan.net/language_php/17381





'Development > PHP' 카테고리의 다른 글

php - eclipse zend debugger plugin install  (0) 2015.06.03
php - array  (0) 2013.06.19
php - 유용한 함수  (0) 2013.05.23
php - 기본 문법  (0) 2013.05.17
php - iphone, android detect  (0) 2013.05.16
Posted by linuxism
,