2012-07-29 56 views
1

我想从我在Amazon Elastic block存储上创建的其中一个EBS卷下载文件。主要建议使用ServletContext#getResource()及其配对ServletContext#getResourceAsStream()以及建议here从Amazon EBS读取文件

但在这种情况下,是下面的代码最好

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

回答

0

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

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

两种方式都可以让你获得文件的句柄,但是getServletContext()将在Tomcat的工作区域中引用你的应用程序的位置。你打算把EBS卷挂载到Tomcat的工作区域,你可以很容易的找到它。

如果您正在运行Web服务器,并且它允许您使用新的FileInputStream(新文件(MY_EBS_LOCATION +“/”+ ...)直接在您的EBS卷中访问文件,那么一定要使用它 - 清晰和容易。

0

具有的属性文件的路径,并使用绝对路径是由于以下原因越好,

  • 有可能ec2卷的挂载点发生更改,在类路径中进行修改并进行修改比修改属性文件中的条目要困难得多。
  • 正常情况下,资源文件等资源是通过getResource()获得的,如果要存储其他IO像存储照片,办公文档则明智地使用绝对路径进行访问。

它还依赖于用例,如果文件(资源)经​​常被应用程序和应用程序使用,那么你可以在类路径中使用它,并将其与压缩文件一起打包。