Java EE - 获取上传文件的真实路径的最佳方式? [复制]

Posted

技术标签:

【中文标题】Java EE - 获取上传文件的真实路径的最佳方式? [复制]【英文标题】:Java EE - Best way to get real path to uploaded files? [duplicate] 【发布时间】:2011-09-01 18:05:54 【问题描述】:

我有一个带有上传表单的 Web 应用程序,用户可以在其中上传文件。

我想将文件存储在“文件”文件夹中。我希望这个文件夹直接放在 webapp-root 下。

使用struts2,在我的uploadFileAction中,我可以很容易地用String uploadDir = ServletActionContext.getServletContext().getRealPath("/files")+ "/";设置这个路径

但是当我试图检索文件时,显然我试图访问文件的 bean 无权访问 getServletContext() 并因此在 getRealPath 上抛出一个空指针

现在我想弄清楚我应该如何处理这个问题。我听说春天资源是要走的路,但我找不到任何相关的例子。

有没有简单的方法来获取我的路径?我只想要我的 webapp 的根路径。不多不少...

【问题讨论】:

【参考方案1】:

我希望将此文件夹直接放在 webapp-root 下。

这行不通。每当您重新部署 web 应用程序甚至重新启动服务器时,所有这些文件都会丢失。这些文件不包含在原始 WAR 中。

您需要将它们存储在 webapp 上下文之外的固定路径中。例如。 /var/webapp/uploads。您可以在属性文件或系统属性中配置此路径。

【讨论】:

哇。我没想到。感谢您指出我明显的错误。但是当我在平台(linux-windows)之间移动时,我需要一个到我的上传目录的相对路径。我不喜欢每次进行平台跳转时都编辑属性文件... 在 Java File API 中,像 /var/webapp/uploads 这样的类 Unix 路径在 Windows 中也可以正常工作。它只是相对于执行代码的磁盘,Java 会处理斜杠。例如。当服务器在C: 上运行时,它会以C:\var\webapp\uploads 结束。 感谢您清除该位。原谅我是一个 unix-newb,但我仍然有点不确定如何指定路径,因为我的 unix 服务器是共享主机,我认为我只能访问 ~ 目录,我需要把该文件下的某个文件..任何指针都会有很大帮助! 你可以只创建一个文件夹吗?请注意,这需要具有 r/w 访问权限。 我的意思是,如何指定到这样一个目录的真实路径~。但我想我想通了。它的真实路径是 /home/*username*/【参考方案2】:

无论您使用什么操作系统平台,我都发现有几种方法可以实现这一点。我通常喜欢以相对于我的 Web 应用程序的某种方式存储我的文件。话虽这么说,最简单的方法是使用您的类文件作为获取真实路径的参考。我使用类似于以下内容的东西来存储我构建的一些 Web 应用程序的图像上传:

public class FileLocationTest 

    public static void main(String[] args) 
        String path = FileLocationTest.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        System.out.println(path);
    

这可以使用您的网络应用程序中的静态实用程序类来完成,或者任何与此相关的类来获取您的应用程序的真实路径,而不管操作系统如何。或者,在 servlet 中,如果我的应用程序库位于不同的区域,我还使用请求类来获取 Tomcat 位置,如下所示:

    String location = request.getClass().getProtectionDomain().getClassLoader().getClass().getProtectionDomain().getCodeSource().getLocation().getPath();
    String path = location.substring(0, location.indexOf("/tomcat")) + "/data/events/images/";

【讨论】:

以上是关于Java EE - 获取上传文件的真实路径的最佳方式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

java获得上传文件的路径

java中获取文件或文件夹的路径方

Java几种路径的获取

Java Servlet+Objective-c图上传 步骤详细

java 根据URI获取文件真实路径

如何在运行时获取 Java 应用程序的真实路径?