Maison > base de données > tutoriel mysql > Comment convertir un blob BufferedInputStream d'une base de données en une image visible ?

Comment convertir un blob BufferedInputStream d'une base de données en une image visible ?

Linda Hamilton
Libérer: 2024-11-09 21:22:02
original
1010 Les gens l'ont consulté

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

Convertir BufferedInputStream en image

Le défi se pose lorsque l'on tente de transformer un Blob récupéré d'une base de données en une image visible. Dans ce cas précis, le Blob est stocké en tant que BufferedInputStream et sa conversion directement en image via ImageIO.read renvoie null.

Résoudre le problème

  1. Validez le InputStream : Vérifiez que la méthode Blob#getBytes renvoie la longueur correcte. Assurez-vous que le contenu du fichier n'est pas tronqué.
  2. Extraire correctement les données binaires : Utilisez Blob#getBinaryStream au lieu de Blob#getBytes pour récupérer les données binaires, en tenant compte des caractéristiques spécifiques de la base de données (par ex. , H2).
  3. Bypass BufferedInputStream : Contournez le BufferedInputStream en créant un ByteArrayOutputStream et en y écrivant les données binaires. Créez ensuite un ByteArrayInputStream à partir du ByteArrayOutputStream à utiliser avec ImageIO.read.

Modifications de code suggérées :

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;
}
Copier après la connexion

En implémentant ces modifications, le Blob est récupéré correctement, converti en ByteArrayInputStream et lu comme une image à l'aide de ImageIO.read.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal