IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

stocker des fichiers dans une base de données avec java


Sujet :

Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut stocker des fichiers dans une base de données avec java
    je suis entrain de développer une application avec java qui nécessite un upload des fichiers qui vont être stocker dans une base de données ,, j'arrive pas a trouver une solution ,, j'ai essayer de stocker un objet de type InputStream dans une colonne de type Blob ,, mais ce de n'importe quoi ce qui est enregistrer dans cette colonne ,, est ce que vous pouvez m'aider !!

  2. #2
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    Bonjour dali0802,

    1) Dans un premier temps il faut vérifier que le fichier uploadé est bien valide sur ton serveur.

    2) Si le fichier est bien valide l'idée est de convertir ton fichier en byte[] (ce qui, tu as bien fait, est un BLOB).

    Une méthode trouvée ici (attention à bien faire les imports) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    private byte[] getByteArrayFromFile(final Document handledDocument) throws IOException {
    final ByteArrayOutputStream baos = new ByteArrayOutputStream();
    // Ici c'est un objet Document, mais on peut y mettre un File (voir Javadoc pour FileInputStream).
    final InputStream in = new FileInputStream(handledDocument);
    final byte[] buffer = new byte[500];
    int read = -1;
    while ((read = in.read(buffer)) > 0) {
        baos.write(buffer, 0, read);
    }
    in.close();
    // Retour un tableau de byte (byte[]).
    return baos.toByteArray();
    }

    On peut ensuite imaginer que cette méthode getByteArrayFromFile peut être utilisée au moment d'insérer ton fichier en BDD (ici on utilise une requête préparée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    /*
    * Table "test"
    * Column "filename" / Data type "int"
    * Column "filedatablob" / Data type "blob"
    */
    String sql = "INSERT INTO test(filename, filedatablob) VALUES(?,?)";
    PreparedStatement statement = conn.getConnection().prepareStatement(sql);
    statement.setLong(1, filename);
    // utilisation de la méthode décrite précédement
    ByteArrayInputStream bais = new ByteArrayInputStream(getByteArrayFromFile(document));
    statement.setBlob(2, bais);          
    statement.execute();
    // Attention certaines BDD font un commit implicit.
    conn.commit();
    Ton fichier doit être normalement dans la colonne "filedatablob".

    (3) Cependant le contenu ne doit pas être lisible (et oui on vient de stocker des bytes !).

    En espérant t'avoir aider un peu

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    merci b1 verantom ça était b1 marché ,, mais comment je peux vérifier que le contenu de cette colonne n'est pas du n'importe quoi !! ( je dois faire un download mais j'y arrivai pas )

  4. #4
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Juin 2008
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2008
    Messages : 30
    Points : 46
    Points
    46
    Par défaut
    Il faut bien que tu comprennes que la colonne n'est que la représentation de ton fichier en .. binaire D'ou le nom de BLOB (Binary Large OBject).
    En aucun cas tu ne "verras" ton fichier ou ne pourras l'exploiter comme tu peux le faire facilement via un gestionnaire de fichier.

    Ta colonne agit ici comme un stockage ... dans une base de données et en binaire et non comme un stockage sur un filesystem (cf Wiki).

    Tu as donc (facilement) 2 choix :
    - Enregistrer ton fichier [ce que j'ai décris lors de mon post précédent].
    - Récupérer ton fichier [ce que je crois tu essayes de faire].

    Afin de pouvoir récupérer ton fichier depuis ta base (en reprenant l'exemple de mon dernier post) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
     File monFichier= new File("\\tmpFile");
      FileOutputStream ostreamFichier = new FileOutputStream(monFichier);
      try
      {
        // La table étant très sommaire, tu peux rajouter des champs pour étendre tes critères et faciliter la récupération de ton BLOB
        PreparedStatement ps = conn.prepareStatement("select filedatablob from test where filename=?");
        try
        {
          ps.setString(1,filename);
          ResultSet rs = ps.executeQuery();
          try
          {
            if(rs.next())
            {
          	  InputStream istreamFichier = rs.getBinaryStream("filedatablob");
     
          	  byte[] buffer = new byte[1024];
          	  int length = 0;
     
          	  while((length = istreamFichier.read(buffer)) != -1)
          	  {
          	    ostreamFichier.write(buffer, 0, length);
    	  }
      	}
          }
          finally
          {
            rs.close();
          }
        }
        finally
        {
          ps.close();
        }
      }
      finally
      {
        ostreamFichier.close();
      }
    Je me suis inspiré du tuto présent ici

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    merci b1 pour vous ,, ça fonctionne b1

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/01/2012, 18h08
  2. Des fichiers dans une base de données : un mal absolu ?
    Par MainMa dans le forum Optimisations
    Réponses: 3
    Dernier message: 04/02/2010, 20h21
  3. stocker des fichiers dans une base de donnée MYSQL
    Par Invité(e) dans le forum MySQL
    Réponses: 5
    Dernier message: 03/12/2009, 13h10
  4. Comment stocker des images dans une base de données ?
    Par [Silk] dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/07/2005, 11h29
  5. Interet de mettre des fichiers dans une base de donnée
    Par Oberown dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 04/07/2005, 11h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo