如何在File类中提供相对路径来上传任何文件?

时间:2011-05-19 13:30:29

标签: java servlets file-upload

我正在上传一个文件,我想为其提供一个相对路径,因为该程序应该在linux和windows环境下工作。

这是我用来上传的内容

realPath = getServletContext().getRealPath(/files);
destinationDir = new File(realPath);
if(!item.isFormField())
                {
                    File file = new File(destinationDir,item.getName());

                    item.write(file);
}

此处直接提供相对路径的任何其他方法

File file = new File(destinationDir,item.getName());

2 个答案:

答案 0 :(得分:9)

  

我想提供一个相对路径

永远不要在网络应用中这样做。工作目录不能从代码内部控制。


  

因为该程序应该在linux和windows env。

中工作

只需使用"/path/to/uploaded/files"即可。它在两种环境中都同样有效。在Windows中,它只与服务器运行的磁盘相同。

File file = new File("/path/to/uploaded/files", filename);
// ...

  

这就是我用来上传的内容

 realPath = getServletContext().getRealPath(/files);
 destinationDir = new File(realPath);

您不应将文件存储在webcontent中。当WAR未展开时,这将失败,即使是这样,每当您重新部署WAR时,所有文件都将丢失。将它们存放在WAR外面的绝对位置,例如/path/to/uploaded/files之前的建议。

另见:

答案 1 :(得分:0)

正如BalusC指出的那样,您不希望将文件保存到使用getRealPath找到的目标。重新部署时,这些文件不仅会被删除,而且任何可以访问您网站的用户都可以下载这些文件,这取决于您的操作,可能是一个严重的安全问题。

当我遇到这个问题时,我通常会创建一个属性文件,并将用于保存文件的目录放在属性文件中。然后我可以为Linux和Windows,或者服务器A和服务器B提供不同的路径。它可能只为您创建路径并对其进行硬编码,但我经常发现在不同的服务器上需要不同的路径。就像,在我目前的项目中,我们有三个Tomcat实例在同一个物理盒上运行,用于不同的测试阶段。我们不希望他们写的所有文件都转到同一目录:每个都应该有自己的文件。