views:

200

answers:

1

Hi,
I'm using Apache common fileupload library with Netbeans 6.8 + Glassfish.I'm trying to change the current upload path to be in the current context path of the servlet , something like this: WEB-INF/upload

so I wrote :

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

but I noticed that the library saves the uploaded files into glassfish folder , here what I get when I print the absolute path of the uploaded file :

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

My Question :

  • How can I force the common fileupload to save the uploaded file in a path relative to the current servlet path , so I don't need to specify the whole path ? is this possible ?
+1  A: 

The java.io.File acts on the local disk file system and knows absolutely nothing about the context it is running in. You should not expect it to find the "right" location when you pass a relative web path in. It would become relative to the current working directory which is dependent on how you started the environment. You don't want to be dependent on that.

You can use ServletContext#getRealPath() to convert a relative web path to an absolute local disk file system path.

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