2010-05-25 3 views
3

J'utilise la bibliothèque fileupload commune Apache avec Netbeans 6.8 + Glassfish.I'm essayer de changer le chemin de téléchargement en cours d'être dans le chemin du contexte actuel de la servlet, quelque chose comme ceci: WEB-INF/uploadComment définir le chemin d'accès au "chemin du contexte" pour les fichiers téléchargés à l'aide d'Apache Common fileupload?

donc j'écrit:

File uploadedFile = new File("WEB-INF/upload/"+fileName); 
session.setAttribute("path",uploadedFile.getAbsolutePath()); 
item.write(uploadedFile); 

mais je remarquai que la bibliothèque enregistre les fichiers téléchargés dans le dossier GlassFish, voici ce que je reçois quand j'imprimer le chemin absolu du fichier téléchargé:

C:\Program Files\sges-v3\glassfish\domains\domain1\WEB-INF\upload\xx.rar 

Ma question:

  • Comment puis-je forcer la fileupload commune pour enregistrer le fichier téléchargé dans un chemin relatif au chemin de servlet en cours, donc je ne ai pas besoin de spécifier le chemin entier? Est-ce possible ?

Répondre

7

Les java.io.File agit sur le système de fichiers de disque local et ne sait absolument rien sur le contexte, il est en cours d'exécution. Vous ne devriez pas vous attendre à trouver l'emplacement « droit » lorsque vous passez un chemin web relatif dans. Il deviendrait relatif au répertoire de travail actuel qui dépend de la façon dont vous avez démarré l'environnement. Vous ne voulez pas être dépendant de ça.

Vous pouvez utiliser ServletContext#getRealPath() pour convertir un chemin Web relatif en un chemin de système de fichiers de disque local absolu.

String relativeWebPath = "/WEB-INF/uploads"; 
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath); 
File uploadedFile = new File(absoluteFilePath, FilenameUtils.getName(item.getName())); 
// ... 

Cela dit, j'espère que vous êtes au courant que le dossier deploy n'est pas le bon emplacement pour les fichiers téléchargés qui sont censés être enregistrés de façon permanente. Tout va se perdre lorsque vous redéployez la webapp. Voir aussi How to write a file to resource/images folder of the app?

Questions connexes