【问题标题】:Read a file from Amazon EBS从 Amazon EBS 读取文件
【发布时间】:2012-07-27 15:50:52
【问题描述】:

我想从我在 Amazon Elastic 块存储上创建的 EBS 卷之一下载文件。大多数情况下,建议使用ServletContext#getResource() 及其对应的ServletContext#getResourceAsStream() 以及建议here

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

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

【问题讨论】:

    标签: java amazon-ec2 amazon-web-services amazon-ebs servlet-3.0


    【解决方案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 卷中的文件,那么请务必使用它 - 清除并且容易。

    【讨论】:

      【解决方案2】:

      在properties文件中有文件路径,使用绝对路径比较好,原因如下,

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多