如何提供相对路径中的文件类上传任何文件? [重复] 如何提供相对路径中的文件类上传任何文件?

2019-05-12 04:01发布

这个问题已经在这里有一个答案:

  • 推荐的方式来保存上传的文件在servlet应用 2个回答

我上传的文件,我想提供一个相对路径,因为该计划应在Linux和Windows ENV工作。

这是我使用的上载内容

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());

Answer 1:

我想提供一个相对路径

从来没有这样做,在web应用程序。 工作目录是不是从里面的代码控制。


因为该计划应在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); 

你不应该将文件存储在web内容。 当战争没有展开这将失败,即使它是,当你重新部署WAR中的所有文件会迷路。 存储它们的外战中的绝对位置,例如/path/to/uploaded/files作为前建议。

也可以看看:

  • 的getResourceAsStream()VS的FileInputStream
  • 对于上传文件的最佳位置
  • 最简单的方式来服务于Java Web应用程序从应用服务器以外的静态数据


Answer 2:

作为BalusC指出的那样,你不希望将文件保存到与getRealPath找到了目的地。 不仅将这些文件被消灭了,当你重新部署,但他们也将提供下载由谁可以到达你的网站,这取决于你在做什么,可能是一个严重的安全问题的任何用户。

当我面对这个问题,我通常创建一个属性文件,并把要保存在属性的文件文件的目录。 然后,我可以有一个不同的路径为Linux和Windows,或为服务器A和B.它可能为你工作只是创造一个路径和硬编码,但我经常发现我需要在不同服务器上的不同路径。 就像,在我目前的项目,我们对测试的不同阶段相同的物理机器上运行的Tomcat的三个实例。 我们不希望他们写的所有文件到同一个目录:每个人都应该有自己的。



文章来源: How to provide relative path in File class to upload any file? [duplicate]