Pourquoi ai-je des erreurs de suppression de fichiers non déterministes lors de l'utilisation DiskFileItem?

StackOverflow https://stackoverflow.com/questions/8313117

  •  25-10-2019
  •  | 
  •  

Question

Mon servlet de téléchargement ne cesse de me lancer une exception en disant que le fichier que je suis en train de remplacer (à la fin de mon code) ne peut pas être supprimé au hasard (en apparence). Je ne sais pas ce qui cause ce que je ne suis pas en utilisant tous les cours d'eau et le fichier n'est pas ouvert dans mon navigateur. Est-ce que quelqu'un sait quelle pourrait être la cause de ceci? Je suis complètement désemparés sur celui-ci que le code semble correct pour moi. Ceci est la première fois que je l'ai utilisé DiskFileItem donc je ne sais pas s'il y a des nuances à gérer il.

Gardez à l'esprit que cela fonctionne parfois, ne parfois pas. Je suis perdu sur ce point.

Problème Zone:

File destination = new File(wellnessDir + File.separator + fileName + ".pdf");

  System.out.println("destination file exists: " + destination.exists());
  System.out.println("file to be moved exists: " + uploadedFile.exists());

  if(destination.exists()){
    boolean deleted = destination.delete();
    if(!deleted)
      throw new Exception("Could not delete file at " + destination);
  }        

out mon système toujours dire que les deux fichiers et exist destination. Je suis en train d'obtenir le téléchargement pour écraser le fichier existant.

code complet: (& pastebin )

private void uploadRequestHandler(ServletFileUpload upload, HttpServletRequest request)
  {
    // Handle the request
    String fileName = "blank";
    try{         
      List items = upload.parseRequest(request);
      //Process the uploaded items
      Iterator iter = items.iterator();
      File uploadedFile = new File(getHome() + File.separator + "temp");
      if(uploadedFile.exists()){
        boolean tempDeleted = uploadedFile.delete();
        if(!tempDeleted)
          throw new Exception("Existing temp file could not be deleted.");
      }
      //write the file
      while (iter.hasNext()) {
        DiskFileItem item = (DiskFileItem) iter.next();
        if(item.isFormField()){
          String fieldName = item.getFieldName();
          String fieldValue = item.getString();
          if(fieldName.equals("fileName"))
            fileName = fieldValue;
            //other form values would need to be handled here, right now only need for fileName
        }else{
          item.write(uploadedFile);
        }
      }
      if(fileName.equals("blank"))
        throw new Exception("File name could not be parsed.");
      //move file
      File wellnessDir = new File(getHome() + File.separator + "medcottage" + File.separator + "wellness");
      File destination = new File(wellnessDir + File.separator + fileName + ".pdf");

      System.out.println("destination file exists: " + destination.exists());
      System.out.println("file to be moved exists: " + uploadedFile.exists());

      if(destination.exists()){
        boolean deleted = destination.delete();
        if(!deleted)
          throw new Exception("Could not delete file at " + destination);
      }        
      FileUtil.move(uploadedFile, new File(wellnessDir + File.separator + fileName + ".pdf"));
      writeResponse();
    } catch (Exception e) {
      System.out.println("Error handling upload request.");
      e.printStackTrace();
    }
  }

modifier: à ajouter, getHome () et "maison" ne sont pas vraiment dans le code, qui est juste pour protéger mon chemin de la maison

Était-ce utile?

La solution

Après beaucoup d'essais et d'aggravation, finalement essayé sur une autre machine, même code, a très bien fonctionné. A quelque chose à voir avec moi transfert de domaines sur ma machine de travail et de déconner avec les permissions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top