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

我正在上传一个文件,我想提供一个相对路径,因为该程序应该在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()); 

我想提供一个相对路径

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


因为该程序应该在linux和windows环境下工作。

只需使用"/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 ,如前所述。

也可以看看:

  • getResourceAsStream()vs FileInputStream
  • 上传文件的最佳位置
  • 在Java Web应用程序中从应用程序服务器外部提供静态数据的最简单方法

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

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