데이터베이스에서 Blob을 변환할 때 `BufferedImage`가 null인 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-10 12:28:02
원래의
835명이 탐색했습니다.

Why is my `BufferedImage` null when converting a Blob from a database?

BufferedInputStream을 이미지로 변환

JPEG 형식의 이미지라고 가정하는 데이터베이스의 Blob을 변환하는 중에 문제가 발생했습니다. , 추가 처리를 위해 BufferedImage로 변환합니다. 변환이 실패하고 Image 변수가 null로 유지됩니다.

변환 실패의 가능한 원인

코드를 검토한 후 몇 가지 잠재적인 문제로 인해 변환이 실패할 수 있습니다.

  1. 데이터 검색: 코드는 다음을 사용하여 Blob 데이터를 검색합니다. blob.getBytes(1, blobLength). 그러나 blobLength는 long(64비트 정수)으로 얻어지는 반면 getBytes는 int(32비트 정수)를 기대합니다. 이러한 불일치로 인해 데이터가 잘리고 잘못된 이미지 검색이 발생할 수 있습니다.
  2. 이미지 확인: UploadedInputStream 스트림에 유효한 이미지가 포함되어 있는지 확인하는 것이 좋은 시작점이 될 것입니다. ImageIO.write를 사용하여 임시로 이미지를 파일에 쓴 다음 다시 읽어서 무결성을 확인할 수 있습니다.
  3. Blob 콘텐츠 처리: H2 데이터베이스 문서에 따르면 Blob 콘텐츠는 메모리에 저장되지 않습니다. 따라서 blob.getBytes를 사용하는 대신 blob.getBinaryStream을 사용하여 blob의 스트림 표현을 검색해야 합니다.

해결책

문제를 해결하려면 , 다음과 같이 코드를 수정해 보세요.

public Response post(@PathParam("id") String id) throws IOException {
    Connection con = connection();
    Blob blob = getPhoto(con);
    BufferedImage image = null;
    InputStream blobStream = null;
    int blobLength = 0;
    try {
        blobLength = (int) blob.length();
        blobStream = blob.getBinaryStream(1, blobLength);
        image = ImageIO.read(blobStream);
    } catch (SQLException e2) {
        e2.printStackTrace();
    }  

    return Response.ok(image).build();
}
로그인 후 복사

또한 UploadInputStream을 파일에 쓰고 다시 읽어 이미지가 포함되어 있는지 확인하여 유효성을 검사합니다.

위 내용은 데이터베이스에서 Blob을 변환할 때 `BufferedImage`가 null인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿