2012-07-29 65 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像存儲照片,辦公文檔則明智地使用絕對路徑進行訪問。

它還依賴於用例,如果文件(資源)經​​常被應用程序和應用程序使用,那麼你可以在類路徑中使用它,並將其與壓縮文件一起打包。