Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 11 sur 11
  1. #1
    Nouveau Membre du Club
    Inscrit en
    juin 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 147
    Points : 39
    Points
    39

    Par défaut Parcourir, charger et sauvegarder une image dans une BDD

    Bonjour

    J'aimerais savoir comment sauvegarder une image dans une base de données mysql avec J2EE,et ensuite pouvoir l'afficher.En effet j'aimerais faire un truc comme lorsqu'on charge ajoute une nouvelle photo sur sa page facebook, c'est à dire :

    1. Parcourir l'image sur le disque dur
    2. Charger l'image sur le site web
    3. Sauvegarder l'image dans la base de données


    Je ne sais vraiment pas par où commencer;Donc j'attends impatiemment votre aide.

    Merci

  2. #2
    Expert Confirmé
    Avatar de olivier.pitton
    Homme Profil pro olivier pitton
    Étudiant
    Inscrit en
    juin 2012
    Messages
    355
    Détails du profil
    Informations personnelles :
    Nom : Homme olivier pitton
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2012
    Messages : 355
    Points : 2 943
    Points
    2 943

    Par défaut

    Plop,

    Parcourir l'image sur le disque dur
    Tu peux utiliser un input de type file te permettant de parcourir les fichiers sur le pc du client.

    Documentation ici.

    Charger l'image sur le site web
    Côté serveur, tu ajoutes une Servlet (ou quelque chose capable d'intercepter des requêtes HTTP de type POST) et tu récupères le contenu du fichier. Le plus simple pour cela est d'utiliser cette bibliothèque : apache-commons-fileupload

    Sauvegarder l'image dans la base de données
    Enfin, pour stocker purement l'image, tu peux utiliser la structure BLOB de MySQL. Tu peux, par exemple, créer une table contenant le nom d'une image, l'utilisateur propriétaire et le blob.

    Pour l'affichage, il te suffit de récupérer toutes les images de l'utilisateur désirant voir ses photos, par exemple, en utilisant le champ utilisateur propriétaire que j'ai décris précédemment.

    Bon courage !

  3. #3
    Nouveau Membre du Club
    Inscrit en
    juin 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 147
    Points : 39
    Points
    39

    Par défaut

    Ok merci,je vais exploiter cette piste.Je te tiens au courant

  4. #4
    Nouveau Membre du Club
    Inscrit en
    juin 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 147
    Points : 39
    Points
    39

    Par défaut

    J'ai parcouru les liens que tu m'as envoyés et je dois avouer que c'est un peu chaud pour moi ., surtout pour le chargement de l'image sur le site web.Il y'a quelques zones d'ombres notamment ce bout de code:

    Code :
    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
     
               try {
                // Check that we have a file upload request
    boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    // Create a new file upload handler
    ServletFileUpload upload = new ServletFileUpload();
     
    // Parse the request
    FileItemIterator iter = upload.getItemIterator(request);
    while (iter.hasNext()) {
        FileItemStream item = iter.next();
        String name = item.getFieldName();
        InputStream stream = item.openStream();
        if (item.isFormField()) {
            String name = item.getFieldName();
        String value = item.getString();
     
     
        } else {
            String fieldName = item.getFieldName();
        String fileName = item.getName();
        String contentType = item.getContentType();
        boolean isInMemory = item.isInMemory();
        long sizeInBytes = item.getSize();
        }
    }
     
     
            }
    Si j'ai bien compris après avoir utilisé le "input file" pour chercher le fichier sur le disque dur, je peux utiliser ce code pour récupérer le fichier qui se trouve dans le champ de texte.Maintenant ce que je n'arrive pas à comprendre:

    1.Dans ce bout de code:
    Code :
    boolean isMultipart = ServletFileUpload.isMultipartContent(request)
    Qu'est ce que je suis censé mettre dans "request"?

    2.Pourquoi certaines class ne sont pas reconnues par mon netbeans?Parce qu'en plus mon netbeans ne me propose pas d'importer les class pour corriger ces erreurs.Il s'agit de:
    ServletFileUpload; FileItemIterator; FileItemStream;
    3.Comment le code ci-dessus arrive à récupérer les détails du fichier sans qu'il n y ait un lien entre le champ de texte et le code.C'est à dire qu'il faudrait par exemple insérer le nom du "input file" dans le code ci-dessus.

    Encore merci

  5. #5
    Nouveau Membre du Club
    Inscrit en
    juin 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 147
    Points : 39
    Points
    39

    Par défaut

    Finalement je sais pourquoi mes class ne sont pas reconnues.JE devais les créer moi-même ().Mais heureusement que ces class sont téléchargeables sur le lien que tu m'as donné.Cependant la Class FileCleaningTracker n'est pas incluse dans le package que j'ai téléchargé.Donc la solution est de la rechercher et de la créer moi même.Mais le problème qui se pose, quand je crée la class, il y a toujours une nouvelle Class ou une méthode qui n'est pas reconnue.Donc je dois la rechercher et la créer.Ainsi de suite.Donc je me retrouve chaque fois à créer de nouvelles class.Donc mis à part le package que j'ai téléchargé,j'ai créé une dizaine class et j'ai toujours de nouvelles erreurs.

    Donc j'aimerais savoir si je dois continuer à les créer moi même ou bien y aurait-il un autre package que j'ai oublié de télécharger.

    Je dois aussi rappeler que j'ai ajouté le jar "commons-fileupload-1.2.2.jar" dans mon application.

    Merci

  6. #6
    Nouveau Membre du Club
    Inscrit en
    juin 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 147
    Points : 39
    Points
    39

    Par défaut

    J'ai trouvé,il fallait tout simplement que je crée une nouvelle librairie pour l'ajout du "commons-fileupload-1.2.2.jar".

  7. #7
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    20 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 20 637
    Points : 37 960
    Points
    37 960

    Par défaut

    En jEE6, il existe des annotations sur la servelt pour que ce soit le conteneur qui gère le multipart directement, plus besoin de commons fileupload.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

  8. #8
    Nouveau Membre du Club
    Inscrit en
    juin 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 147
    Points : 39
    Points
    39

    Par défaut

    Je me suis basé sur le code suivant pour insérer une image dans la BD mysql:

    Code :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
     
     
    import java.io.*;
    	import java.sql.*;
    	import java.util.*;
    	import java.util.regex.*;
    	import org.apache.commons.fileupload.servlet.ServletFileUpload;
    	import org.apache.commons.fileupload.disk.DiskFileItemFactory;
    	import org.apache.commons.fileupload.*;
    	import javax.servlet.*;
    import javax.servlet.annotation.WebServlet;
    	import javax.servlet.http.*;
     
              @WebServlet(name="Test2", urlPatterns={"/Test2"})
    	public class Test2 extends HttpServlet {
         Connection con;
    	    @Override
    	    public void doPost(HttpServletRequest request, HttpServletResponse response)
    	            throws ServletException, IOException {
    	        PrintWriter out = response.getWriter();
    	        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
    	        System.out.println("request: " + request);
    	        if (!isMultipart) {
    	            System.out.println("File Not Uploaded");
    	        } else {
    	            FileItemFactory factory = new DiskFileItemFactory();
    	            ServletFileUpload upload = new ServletFileUpload(factory);
    	            List items = null;
     
    	            try {
    	                items = upload.parseRequest(request);
    	                System.out.println("items: " + items);
    	            } catch (FileUploadException e) {
    	                e.printStackTrace();
    	            }
    	            Iterator itr = items.iterator();
    	            while (itr.hasNext()) {
    	                FileItem item = (FileItem) itr.next();
    	                if (item.isFormField()) {
    	                    String name = item.getFieldName();
    	                    System.out.println("name: " + name);
    	                    String value = item.getString();
    	                    System.out.println("value: " + value);
    	                } else {
    	                    try {
    	                        String itemName = item.getName();
    	                        Random generator = new Random();
    	                        int r = Math.abs(generator.nextInt());
     
    	                        String reg = "[.*]";
    	                        String replacingtext = "";
    	                        System.out.println("Text before replacing is:-"
    	                                + itemName);
    	                        Pattern pattern = Pattern.compile(reg);
    	                        Matcher matcher = pattern.matcher(itemName);
    	                        StringBuffer buffer = new StringBuffer();
     
    	                        while (matcher.find()) {
    	                            matcher.appendReplacement(buffer, replacingtext);
    	                        }
    	                        int IndexOf = itemName.indexOf(".");
    	                        String domainName = itemName.substring(IndexOf);
    	                        System.out.println("domainName: " + domainName);
     
    	                        String finalimage = buffer.toString() + "_" + r
    	                                + domainName;
    	                        System.out.println("Final Image===" + finalimage);
     
    	                        File savedFile = new File(
    	                                "C:/UploadedFiles"
    	                                        + "images\\" + finalimage);
    	                        item.write(savedFile);
    	                        out.println("<html>");
    	                        out.println("<body>");
    	                        out.println("<table><tr><td>");
    	                        out.println("<img src=images/" + finalimage + ">");
    	                        out.println("</td></tr></table>");
     
     
     
    	                        String strQuery = null;
    	                        String strQuery1 = null;
    	                        String imgLen = "";
     
    	                        try {
    	                            System.out.println("itemName::::: " + itemName);
     
    	                             Class.forName("com.mysql.jdbc.Driver");
     
    	                           con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbTetris","root","passer");
    	                            Statement st = con.createStatement();
    	                            strQuery = "insert into testimage values image='"
    	                                    + finalimage + "'";
     
    	                            int rs = st.executeUpdate(strQuery);
    	                            System.out
    	                                    .println("Query Executed Successfully++++++++++++++");
    	                            out.println("image inserted successfully");
    	                            out.println("</body>");
    	                            out.println("</html>");
    	                        } catch (Exception e) {
    	                            System.out.println(e.getMessage());
    	                        } finally {
    	                            con.close();
    	                        }
    	                    } catch (Exception e) {
    	                        e.printStackTrace();
    	                    }
    	                }
    	            }
    	        }
    	    }
    	}
    Le problème est que j'ai ce message d'erreur:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'image='img_1752170504.jpg'' at line 1
    Voici la structure de ma table:

    Code :
    1
    2
    3
    4
    5
    CREATE TABLE testimage(
    ID INTEGER AUTO_INCREMENT,
    image BLOB,
    PRIMARY KEY (ID)
    );
    Merci

  9. #9
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro Andry Aimé
    Inscrit en
    septembre 2007
    Messages
    7 033
    Détails du profil
    Informations personnelles :
    Nom : Homme Andry Aimé
    Localisation : Ile Maurice

    Informations forums :
    Inscription : septembre 2007
    Messages : 7 033
    Points : 11 177
    Points
    11 177

    Par défaut

    Bonjour,

    Pourquoi ne pas uploader seulement l'image dans un répertoire spécifique et sauvegarder l'url de l'image dans la base? C'est beaucoup plus performant.

    A+.

  10. #10
    Nouveau Membre du Club
    Inscrit en
    juin 2005
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : juin 2005
    Messages : 147
    Points : 39
    Points
    39

    Par défaut

    Ok je vois.Mais comment

    1. sauvegarder l'URL dans la base de données
    2. Faire le lien entre l'image et l'url lors de l'affichage


    Merci beaucoup

  11. #11
    Expert Confirmé Sénior
    Avatar de tchize_
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    avril 2007
    Messages
    20 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Service public

    Informations forums :
    Inscription : avril 2007
    Messages : 20 637
    Points : 37 960
    Points
    37 960

    Par défaut

    1) tu va te faciliter franchement la tâche en laissant le conteneur gérer l'upload

    exemple ici http://java-brew.blogspot.be/2011/03...ervlet-30.html
    Je cite:
    Code :
    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
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    package com.jb;
     
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.MultipartConfig;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.Part;
     
    @MultipartConfig
    @WebServlet(name="FileUploadServlet", urlPatterns={"/FileUploadServlet"})
    public class FileUploadServlet extends HttpServlet {
     
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            doPost(request, response);
        } 
     
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
     
            System.out.println("do post of file upload...");
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
            Part part = request.getPart("fileName");
            InputStream is = part.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader br = new BufferedReader(isr);
            FileWriter fw = new FileWriter("c:/temp/tmp.txt");
            BufferedWriter bw = new BufferedWriter(fw);
            String line = null;
            while((line = br.readLine())!=null){
            bw.write(line);
            bw.newLine();
            }
            bw.close();
            br.close();
            out.write("File Uploaded successfully...");
            out.close();
        }
    }
    2) il faut que tu te renseigne un peu sur le SQL parce que ta requête ne ressemble à rien -> ouvrir un cours à ce sujet.

    3) en général, l'opération peux se faire de deux manière:
    a) tu stocke l'image dans la base de données (un blob) et tu la récupère dans une servlet dédiée à servir l'image
    b) tu stocke l'image dans un dossier quelconque, tu stocke dans la DB le chemin vers l'image, et tu la récupère dans une servlet dédiée à servir l'image.
    Tchize (Чиз) faq java, cours java, javadoc. Pensez à et
    Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •