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

rakyouna Messages postés 54 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 10 août 2008 - 28 août 2006 à 16:30
rakyouna Messages postés 54 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 10 août 2008 - 30 août 2006 à 12:55
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

Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
28 août 2006 à 21:32
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 ();
   }
0
rakyouna Messages postés 54 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 10 août 2008 1
29 août 2006 à 13:03
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> 
......

??????
0
rakyouna Messages postés 54 Date d'inscription lundi 11 juillet 2005 Statut Membre Dernière intervention 10 août 2008 1
30 août 2006 à 12:55
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  !
0