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

Développement Web en Java Discussion :

Supprimer un fichier dans une WebApp


Sujet :

Développement Web en Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut Supprimer un fichier dans une WebApp
    Bonjour,

    Mon problème est que je crée un fichier temporaire et je voudrais le supprimer après traitement.

    Ceci se passe dans ma servlet... Lorsque je veux supprimer le ficher, la méthode fait System.getSecurityManager() et renvoit toujours null, du coup, mon fichier n'est jamais supprimé.

    J'ai trouvé une solution qui consiste à faire un deleteOnExit et d'invalider ma session... ce qui, vous en conviendrez, ne m'arrange pas.

    Je ne mets pas de bout de code car pour l'instant je n'ai aucune solution et tout se passe en back-end...

    Merci beaucoup pour votre aide, Sarah

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Bonjour,
    euhhh, et comment tu crées ton fichier temporaire ?
    Parce qu'à priori, si c'est juste un fichier temporaire, tu utilises File.createTempFile(...); ou bien une méthode/façon qui t'est propre, mais bon, .. je ne vois pas en quoi tu te compliques la vie en faisant des System.getSecurityManager() etc ...
    Montre un bout de code ou soit plus explicite dans les détails.

    Cordialement,
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut
    Je crée mon fichier bêtement en faisant createTempFile comme tu le dis (mais ça ne fonctionnait quand même pas) ou en faisant

    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
     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        PrintWriter out = response.getWriter();
        response.setContentType("text/plain");
         DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
     
        fileItemFactory.setSizeThreshold(1 * 1024 * 1024); //1 MB
     
        fileItemFactory.setRepository(tmpDir);
     
        ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
        FileItem item = null;
        File myFile = null;
    try {
     
          List items = uploadHandler.parseRequest(request);
          Iterator itr = items.iterator();
          while (itr.hasNext()) {
            item = (FileItem) itr.next();
            myFile= new File(destinationDir, item.getName());
              myFile.setWritable(true);
              item.write(file);
    //Traitement back-end pour créer un fichier zip à partir de myFile
    uploadFile(idTask, file, mimeType, new Long(propertiesOpCrm.getProperty("idTable")), connectedUser.getLogin(), idPatient, new Long(propertiesOpCrm.getProperty("idDescription")));
     
    myFile.delete();
    catch (FileUploadException ex) {
          log("Error encountered while parsing the request", ex);
        } catch (Exception ex) {
          log("Error encountered while parsing the request", ex);
        } finally {
          if (out != null) out.close();
          if (item != null) item.delete();
          if(myFile != null) myFile.delete();
    }
    Dans la methode delete de la classe File:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public boolean delete() {
    	SecurityManager security = System.getSecurityManager();
    	if (security != null) {
    	    security.checkDelete(path);
    	}
    	return fs.delete(this);
        }
    C'est ici que security est toujours null...

    Merci

  4. #4
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Poste la trace complète de l'exception que tu as.
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    pourquoi tu va jouer avec ce security manager? Ce sont les api de base de java qui vont jouer (correctement) avec ça pour voir si le delete est autorisé. toi, tu a juste a faire le fs.delete(); D'ailleurs, c'est quoi "fs" ? parce que la méthode delete sur File ne prend aucun paramètre.

    Aussi , le deleteOnExit() tu oublie dans un environnement J2EE. Par définition, il n'y a pas de "exit" dans ces environnements.

  6. #6
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut
    Il n'y a pas d'exception, rien ne se passe... mon fichier n'est juste pas supprimer étant donné que dans la méthode delete de la classe File, le getSecurityManager renvoit toujours null... (ce n'est pas moi qui joue avec le security manager...)

    J'ai poster tout le code en rapport avec mon problème..

  7. #7
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Donc, si j'ai bien compris, tu n'as pas d'exception, mais c'est juste que ton fichier n'est pas supprimé quand tu arrêtes ton application ? (c'est à dire quand le JVM s'arrête ?)
    Sinon essaie d'utiliser un hook ^^ http://docs.oracle.com/javase/1.4.2/...va.lang.Thread)
    Je ne sais pas trop ce qui se passe dans ton code, mais je sais qu'il faut éviter le deleteOnExit() si tu peux l'éviter
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  8. #8
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut
    Donc effectivement, mon seul problème est "juste" que mes fichiers ne sont pas supprimés.

    Le deleteOnExit ne fonctionnerait que dans la cas où l'on redémarrerait le serveur, c'est pour cela qu'il ne sert pas à grand chose. Le hook ne m'avance donc pas non plus.

    Merci pour votre aide

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par skonat Voir le message
    Il n'y a pas d'exception, rien ne se passe... mon fichier n'est juste pas supprimer étant donné que dans la méthode delete de la classe File, le getSecurityManager renvoit toujours null...
    Ca n'a rien à voir. Au contraire, ce code dit "si il y a un security manager, on vérifie. Sinon on continue l'effacement". Si le fichier est toujours là, plusieurs possibilité

    -> il est en lecture seule
    -> il est toujours ouvert en écriture ou lecture par ton application (tu as bien fermé les streams?)

    aussi, es-tu sur de passer dans le delete (ton code suggère qu'on pourais avoir un exception sur out.close qui empecherais d'atteindre le delete()

  10. #10
    Membre à l'essai
    Femme Profil pro
    Inscrit en
    Avril 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2012
    Messages : 5
    Par défaut
    Bonjour tlm,

    Tu as raison concernant le security manager tchize_, désolée pour cette bavure.

    Tous mes streams sont clos et le File était bien writable.

    Mais oooh mystère, allez savoir pourquoi, mon fichier se supprime à présent bien... allez savoir pourquoi... après un nouveau build maven peut-être...

    Merci pour votre aide ;-)

    Bonne journée, Sarah

Discussions similaires

  1. Ouvrir un fichier contenu dans une webapp depuis une servlet
    Par shawty dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/08/2008, 14h10
  2. afficher les fichiers locaux dans une webapp
    Par gabardine dans le forum Flex
    Réponses: 0
    Dernier message: 21/05/2008, 16h02
  3. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  4. Réponses: 2
    Dernier message: 24/08/2007, 09h48
  5. [VB6] Supprimer un enregistrement dans une ListView ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/11/2002, 09h37

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