首页>Program>source

我正在上载一个文件,我想为其提供一个相对路径,因为该程序应该在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());
最新回答
  • 29天前
    1 #

    I want to provide a relative path

    永远不要在web应用程序中这样做.从代码内部无法控制工作目录.


    because the program should work in both linux and windows env.

    只需使用 "/path/to/uploaded/files" .它在两种环境下均能正常工作.在windows中,它将仅与服务器运行所在的磁盘相同。

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

    This is what i am using to upload

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

    您不应将文件存储在web内容中.当未扩展wAR时,这将失败,即使重新扩展wAR,所有文件也会丢失.将它们存放在wAR外部的绝对位置,例如 /path/to/uploaded/files 如之前所建议的。

    另请参见:

      getResourceAsStream() vs FileInputStream

      Best Location for Uploading file

      Simplest way to serve static data from outside the application server in a Java web application

    Bal

    正如BalusC指出的那样,您不想将文件保存到使用getRealPath找到的目标位置.重新部署后,这些文件不仅会被清除掉,而且所有可以访问您的网站的用户也可以下载这些文件,具体取决于您的工作,这可能是一个严重的安全问题。

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

  • html:通过jQuery删除重复的<tr>
  • 通过Javascript控制Firefox扩展