1

我想从我在 Amazon Elastic 块存储上创建的 EBS 卷之一下载文件。大多数情况下,建议使用它,并且在此处ServletContext#getResource()也建议使用它的对应物。ServletContext#getResourceAsStream()

但在这种情况下,建议使用以下代码

InputStream in = new FileInputStream(new File(FOLDER_PATH_ON_AMAZON_EBS + "/" + folder + "/" + fileName));

4

2 回答 2

1

很难说这里的问题是什么。

如果您询问使用 getServletContext() 还是 new File(PATH_TO_EBS...) 是否更好,那么它仅取决于您正在运行的内容。如果您正在运行一个独立的 java 应用程序并通过套接字请求文件,那么您将使用后者(在您知道在哪里查找的文件上的 FileInputStream)。如果您正在运行 Web 服务器(例如 Tomcat)并且将使用 Web 客户端下载文件,那么您通常会使用 getServletContext(),因为它是 Web 服务器基础结构的一部分。

这两种方法都可以让您获得文件的句柄,但 getServletContext() 将引用 Tomcat 工作区域下的应用程序位置。您是否要将 EBS 卷安装在从 Tomcat 的工作区开始可以轻松访问它的地方。

如果您正在运行 Web 服务器,并且它允许您使用 new FileInputStream(new File(MY_EBS_LOCATION + "/" + ...)) 直接访问 EBS 卷中的文件,那么请务必使用它 - 清晰而简单。

于 2012-08-07T08:56:16.297 回答
0

在属性文件中有文件路径,并且使用绝对路径更好,原因如下,

  • ec2 卷的挂载点有可能发生变化,在类路径中具有该挂载点并且修改该挂载点比修改属性文件中的条目要困难得多。
  • 通常,像属性文件这样的资源是使用 getResource() 获取的,如果还有其他 IO,比如存储照片、办公室文档,那么使用绝对路径进行访问是明智的。

如果应用程序经常使用文件(资源)并且仅应用程序使用,它还取决于用例,那么您可以将其放在类路径中并将其与存档一起打包。

于 2012-08-02T11:02:55.213 回答