Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menukar Gumpalan BufferedInputStream daripada Pangkalan Data kepada Imej yang Boleh Dilihat?

Bagaimana untuk Menukar Gumpalan BufferedInputStream daripada Pangkalan Data kepada Imej yang Boleh Dilihat?

Linda Hamilton
Lepaskan: 2024-11-09 21:22:02
asal
1030 orang telah melayarinya

How to Convert a BufferedInputStream Blob from a Database into a Visible Image?

Tukar BufferedInputStream kepada Imej

Cabaran timbul apabila cuba mengubah Blob yang diambil daripada pangkalan data kepada imej yang boleh dilihat. Dalam kes khusus ini, Blob disimpan sebagai BufferedInputStream dan menukarkannya terus kepada imej melalui ImageIO.read mengembalikan null.

Menangani Isu

  1. Sahkan InputStream: Sahkan bahawa Blob#getBytes kaedah mengembalikan panjang yang betul. Pastikan kandungan fail tidak dipotong.
  2. Ekstrak Data Perduaan Dengan Betul: Gunakan Blob#getBinaryStream dan bukannya Blob#getBytes untuk mendapatkan semula data binari, mengambil kira ciri khusus pangkalan data (cth. , H2).
  3. Pintas BufferedInputStream: Bypass BufferedInputStream dengan mencipta ByteArrayOutputStream dan menulis data binari kepadanya. Kemudian buat ByteArrayInputStream daripada ByteArrayOutputStream untuk digunakan dengan ImageIO.read.

Pengubahsuaian Kod yang Dicadangkan:

public BufferedImage getPhoto(Connection con) throws IOException, SQLException {
    Blob blob = getPhoto(con);
    BufferedImage image = null;
    byte[] data;
    
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
         InputStream is = blob.getBinaryStream()) {
        
        int nRead;
        byte[] buffer = new byte[4096];
        while ((nRead = is.read(buffer, 0, buffer.length)) != -1) {
            baos.write(buffer, 0, nRead);
        }
        
        data = baos.toByteArray();
        image = ImageIO.read(new ByteArrayInputStream(data));
    } catch (SQLException | IOException e2) {
        e2.printStackTrace();
    }
    
    return image;
}
Salin selepas log masuk

Dengan melaksanakan pengubahsuaian ini, Blob adalah diambil dengan betul, ditukar menjadi a ByteArrayInputStream, dan baca sebagai imej menggunakan ImageIO.read.

Atas ialah kandungan terperinci Bagaimana untuk Menukar Gumpalan BufferedInputStream daripada Pangkalan Data kepada Imej yang Boleh Dilihat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan