这个问题已经在这里有一个答案:
- 推荐的方式来保存上传的文件在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());
我想提供一个相对路径
从来没有这样做,在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应用程序从应用服务器以外的静态数据
作为BalusC指出的那样,你不希望将文件保存到与getRealPath找到了目的地。 不仅将这些文件被消灭了,当你重新部署,但他们也将提供下载由谁可以到达你的网站,这取决于你在做什么,可能是一个严重的安全问题的任何用户。
当我面对这个问题,我通常创建一个属性文件,并把要保存在属性的文件文件的目录。 然后,我可以有一个不同的路径为Linux和Windows,或为服务器A和B.它可能为你工作只是创造一个路径和硬编码,但我经常发现我需要在不同服务器上的不同路径。 就像,在我目前的项目,我们对测试的不同阶段相同的物理机器上运行的Tomcat的三个实例。 我们不希望他们写的所有文件到同一个目录:每个人都应该有自己的。