我正在上传一个文件,我想为其提供一个相对路径,因为该程序应该在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());
答案 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实例在同一个物理盒上运行,用于不同的测试阶段。我们不希望他们写的所有文件都转到同一目录:每个都应该有自己的文件。