【问题标题】:Where to store file for email attachment in Java在 Java 中存储电子邮件附件文件的位置
【发布时间】:2015-06-01 21:51:39
【问题描述】:

在我的 Java webapp 中,我有一个发送电子邮件的自动化脚本,我需要在这封电子邮件中附加一个文件。我目前将它放在公共“资产”文件夹中,但是如果不使用绝对路径,我无法在我的 Java 代码中传递文件路径(我的开发服务器是我的本地工作站,因此路径与此路径完全不同)。

有没有办法使用网址 (http://domain.com/assets/file.pdf) 或相对路径来附加文件?根据 Java,我当前的工作目录是“C:\Users\USERNAME\GlassFish_Server\glassfish\domains\domain1\”,但该路径显然没有任何用处 - 没有 Java 类,没有 Web 文件,什么都没有。或者我应该把文件放在其他地方......就像在与发送电子邮件的脚本相同的文件夹中,这似乎是错误的。

【问题讨论】:

  • 如果我正确理解了您的问题:您要附加的文件需要在您的类路径中,因此请确保该文件所在的文件夹也包含在您的类路径中。

标签: java relative-path filepath email-attachments


【解决方案1】:

这在很大程度上取决于您的部署。

正如@Jakub 所说:如果您可以将文件安排在应用程序的类路径中,则可以使用 ClassLoader.getResourceAsStream(...) 来检索文件内容(javadoc 相当不错;知道这一点会很有帮助你可以使用 this.getClass().getClassloader()) 获得一个类加载器。

您可以使用配置文件(以及任何好的配置管理库)来指定资源文件的绝对路径。

如果您知道文件相对于执行路径的位置,您可以说“new File("").getAbsolutePath()”,然后附加您的相对路径。

【讨论】:

  • 所以如果我的包是 org.orgname.project 我应该把 pdf 文件放在像 org.orgname.project.lib 这样的目录中吗?然后,如果我想将 pdf 附加到电子邮件中,请执行 String filename = this.getClass().getClassLoader().getResource("/lib/filename.pdf").getPath()? (如果这是正确的,那么它仍然不起作用 - nullPointerException 仍然)
  • 如果你的目录存放在org.orgname.project.lib中,那么你的资源路径就是“org/orgname/project/lib/filename.pdf”
  • 在风格注释上,在 .getResource 之后链接只是请求空指针异常。获取资源,检查是否为空,如果不为空,则 getPath() 或获取内容。
猜你喜欢
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-22
  • 2023-03-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多