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)之间移动时,我需要一个到我的上传目录的相对路径。我不喜欢每次进行平台跳转时都编辑属性文件... 在 JavaFile
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 - 获取上传文件的真实路径的最佳方式? [复制]的主要内容,如果未能解决你的问题,请参考以下文章