2011-06-14 40 views
3

如何在Action類的​​方法中讀取上傳文件的內容?我能夠在服務器上上傳文件,但不知道如何閱讀該文件的內容。在Struts2中讀取上傳文件的內容

我們必須先將它保存在服務器上嗎?或者我們可以直接閱讀嗎?

+2

你說你可以上傳文件到服務器......這是否意味着文件已經在服務器上?你的意思是你提供了一個允許用戶上傳內容的操作,或者你已經放置了一個文件並想讀取它的服務器上有一個文件夾? – Quaternion 2011-06-15 05:14:47

回答

4

選項1:創建一個servlet

我建議你使用Apache的百科全書file upload。此鏈接提供了有關如何使用FileItem來處理上載文件(將其寫入磁盤或在文件大小足夠小的情況下在內存中讀取它)的示例。另一個相關的例子可以找到here

選項2:使用Struts標籤s:file

正如@BalusC下面支柱的評論中提到有一個內置的使用s:file標籤庫和使用它的教程文件上傳過程提供here。基本上文件被上傳到一個臨時目錄。但是,您可以通過爲default.properties文件中的struts.multipart.saveDir屬性設置值來覆蓋該值。此鏈接還提到使用Apache FileUtils來處理上傳的文件,順便說一句,這是任何文件I/O工作的非常方便的庫。

+1

我不做Struts2,但我想象一下,有一點MVC框架內置了這個設施,當然如果它是Apache框架的話。我在mkyong.com上偷看了一下,發現這個:http://www.mkyong.com/struts2/struts-2-file-upload-example/引入Apache Commons FileUpload有點矯枉過正。 – BalusC 2011-06-14 22:40:38

+0

@BalusC感謝 - 這是使用':file'標籤和apache'FileUtils'類的文件上傳過程的良好鏈接。雖然鏈接沒有明確解釋如何處理文件,但我認爲這部分應該是微不足道的。你介意把它作爲答案嗎?我可以刪除我的帖子,因爲看起來OP應該使用struts提供的文件上傳程序。 – CoolBeans 2011-06-14 22:47:26

+1

我不完全確定這是否有幫助,我不是一個包含鏈接的答案的粉絲:) – BalusC 2011-06-14 22:52:21

2

下面是提供Struts2的標準方法,用一個例子:

http://struts.apache.org/2.0.14/docs/file-upload.html

這是很簡單和優雅(無需混淆servletRequest.getRealPath("/")作爲其他示例鏈接hoss)。

通過使用<s:file>標記(以及合適的攔截器),Struts2將完成所有髒操作併爲您提供(臨時)上傳文件,作爲操作中的File字段;你可以打開它或移動,或者其他任何文件。