Insérrer un fichier dans une base de données

Signaler
Messages postés
54
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
10 août 2008
-
Messages postés
54
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
10 août 2008
-
Slt à tous,

Je veux enregistrer un fichier, qui sera saisi à partir d'un formulaire, dans une base de données MySQL.
Voici un extrait de mon formulaire HTML:

......
<TD> Saisir un fichier : </TD>
<TD> </TD> 
......

et un extrait de ma Servlet:

.....
String file   = request.getParameter("fichier");
.....
query = "Insert into MaTable(tab_file) Values(" + file + ")";
.....

(Le champs tab_file est de type BLOB)
Ce code ne marche pas et n'inserre pas le chemin du fichier ds la Base de Données.

La requête suivante marche sans pb quand je l'exécute directement sur la console de MySQL:

Insert into MaTable(tab_file) values (LOAD_FILE("C:/Fichier1.txt"));

Qu'elle est la solution  ?????

3 réponses

Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
37
Salut :

Pour insérer un fichier dans une base de données on peut utiliser les PreparedStatement.
Vu que je ne connais pas les champs de votre table, je vais supposé que votre table s'appelle myTable et qu'elle contient un seul champ celui contenant le fichier.
(La démarche restera toujours valable)

   // path : correspond au chemin absolu où se trouve le fichier
   File file = new File (path);
   FileInputStream inputStream = new FileInputStream (file);

   try {
      PreparedStatement preStmt;
      // Supposons que vous avez un objet de type Connection "connect"
      preStmt = connect.prepareStatement ("INSERT INTO myTable VALUES (?)");
      
      try {
         // Vu que votre fichier est ASCII on utilise "setAsciiStream"
         // Sinon on utilise "setBinaryStream"
         // 1 ici correspond au rang du champ dans la requête
         preStmt.setAsciiStream (1, inputStream, (int)file.length ());
         preStmt.executeUpdate ();
      }
      finally {
         preStmt.close ();
      }
   }
   finally {
      inputStream.close ();
   }
Messages postés
54
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
10 août 2008
1
Salut,
Mç pour la reponse. Le code ci-dessus marche bien. Je l'ai modifié un peu comme suit:

public void sauveIMG(Connection conn, String location, String name) throws Exception
     {
       File monImage = new File(location);
       FileInputStream istreamImage = new FileInputStream(monImage);
       try
       {
         PreparedStatement ps = conn.prepareStatement("insert into myTable (name, img) values (?,?)");
         try
         {
           ps.setString(1, name);
           // setAsciiStream() : si le fichier est ASCII
           // setBinaryStream() : si fichier image par exp
           // 2 est le rang du champ "img"
           ps.setBinaryStream(2, istreamImage, (int) monImage.length());
           ps.executeUpdate();
         }
         finally
         {
           ps.close();
         }
       }
       finally
       {
         istreamImage.close();
       }
     }

Puis je fais l'appel suivant:
sauveIMG(connection, "C:/logo.gif", "logo");

Mais il me reste le pb de recuperation du path du fichier à partir d'un formulaire HTML:

La ligne suivante :
 out.println("Logo : " + request.getParameter("fichier"));
m'affiche: "Logo : null" sur la servlet au lieu d'afficher le path.

g les lignes suivants ds le formulaire:
......
<TD> Saisir un fichier : </TD>
<TD> </TD> 
......

??????
Messages postés
54
Date d'inscription
lundi 11 juillet 2005
Statut
Membre
Dernière intervention
10 août 2008
1
Salut à tous,


Comment récupérer, dans une Servlet, le chemin d'un fichier saisi dans un formulaire HTML?
Le formulaire contient:

......
<TD> Saisir un fichier : </TD>
<TD> </TD> 
......

La méthode  request.getParameter("fichier")) ne me permet pas de récupérer le chémin du fichier  !