从Amazon EBS读取文件



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

但在这种情况下,以下代码是否可取

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

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

如果您询问是使用getServlet上下文()更好还是使用新文件(PATH_to_EBS…)更好,那么这完全取决于您正在运行的内容。如果您正在运行一个独立的java应用程序并通过套接字请求文件,那么您将使用后者(在您知道要查找的文件上使用FileInputStream)。如果您正在运行web服务器(例如Tomcat),并且将使用web客户端下载文件,那么您通常会使用getServlet上下文(),因为它是web服务器基础设施的一部分。

这两种方法都可以让您获得文件的句柄,但getServlet上下文()将引用Tomcat工作区下应用程序的位置。您打算将EBS卷装载到从Tomcat的工作区开始就可以轻松到达的地方吗。

如果您正在运行web服务器,并且它允许您使用新的FileInputStream(新文件(MY_EBS_LOCATION+"/"+…))直接访问EBS卷中的文件,那么请使用一切方法-清晰而简单。

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

  • ec2卷的装入点可能会发生变化,将其放在类路径中,并且修改它比修改属性文件中的条目相对困难
  • 通常情况下,像属性文件这样的资源是使用getResource()获得的,如果要有其他IO,比如存储照片、office文档,那么明智的做法是使用绝对路径进行访问

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

最新更新