복붙노트

[SPRING] Hibernate (JDBC 아님)를 통해 blob에서 이미지 검색

SPRING

Hibernate (JDBC 아님)를 통해 blob에서 이미지 검색

JSP 페이지에서 데이터베이스의 이미지를 검색하고 표시하는 방법 덕분에 db / blob에서 이미지를 가져 오는 아주 좋은 해결책을 찾았습니까?

그러나 이것은 모든 이미지 요청에서 JDBC 연결을 사용하는 솔루션입니다.

나는 Spring 3 주석과 Hibernate 3을 사용하고있다.

나는 ImageServlet 클래스의 주석에 의해 autowired되는 'imageService'에 의해 유사한 작업을 시도했지만 nullPointerException이 발생했습니다. 즉, ImageService가 Dependency Injection에 의해 설정되지 않았을 수 있습니다.

어떻게 해결할 수 있습니까? 나는 이미지 요청에 단일 jdbc 연결을하고 싶지 않다.

해결법

  1. ==============================

    1.BLOB 유형으로 테이블에 이미지를 저장하고 싶다면 (이것이 최선의 방법이므로 그렇게하려고하지 않는 경우). DB에 저장된 사람의 이미지가있는 Person 클래스가 있다고 가정합니다. 이것을 매핑하려면 이미지를 보유하고있는 사용자 POJO에 속성을 추가하기 만하면됩니다.

    BLOB 유형으로 테이블에 이미지를 저장하고 싶다면 (이것이 최선의 방법이므로 그렇게하려고하지 않는 경우). DB에 저장된 사람의 이미지가있는 Person 클래스가 있다고 가정합니다. 이것을 매핑하려면 이미지를 보유하고있는 사용자 POJO에 속성을 추가하기 만하면됩니다.

    @Column(name="image")
    @Blob
    private Blob image;
    

    그것을 표시 할 때 바이트 []로 변환하고 표시하십시오.

    private byte[] toByteArray(Blob fromImageBlob) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try {
          return toByteArrayImpl(fromImageBlob, baos);
        } catch (Exception e) {
        }
        return null;
      }
    
    
    
    private byte[] toByteArrayImpl(Blob fromImageBlob, 
          ByteArrayOutputStream baos) throws SQLException, IOException {
        byte buf[] = new byte[4000];
        int dataSize;
        InputStream is = fromImageBlob.getBinaryStream(); 
    
        try {
          while((dataSize = is.read(buf)) != -1) {
            baos.write(buf, 0, dataSize);
          }    
        } finally {
          if(is != null) {
            is.close();
          }
        }
        return baos.toByteArray();
      }
    

    이에 대한 자세한 내용은 아래 예제를 참조하십시오.

    보시다시피 여러 가지 방법으로이 작업을 수행 할 수 있습니다. 당신에게 적합한 것을 선택하십시오.

  2. from https://stackoverflow.com/questions/9049488/retrieve-image-from-blob-via-hibernate-not-jdbc by cc-by-sa and MIT license