2017-06-22 95 views
1

我有一個JavaScript文件多上傳到我的圖庫系統。當點擊「開始上傳」時,它會在Struts 2的Action類中調用我的方法的X個線程。在Struts 2中上傳多個文件

在這種方法中,我需要驗證我的圖庫是否有空間來接受文件,傳遞給業務對象,然後傳遞給DAO類。但我的疑問在這裏......

當我這樣做時,我的X線程幾乎在同一時間執行驗證,但線程沒有最終確定上傳,那麼其他線程的大小aren'正確的一個。

任何人都可以給我一些提示嗎?

回答

0

Struts 2框架提供了內置的支持,處理文件上傳符合RFC 1867

你並不需要使用多個請求/線程上傳多個文件。每個請求都作爲單個文件上傳進行處理,同時使用Web服務器的線程池。服務器正在從每個客戶端的請求中選擇一個線程。因此,如果您通過單個文件上傳上傳多個文件,則無法控制處理所有文件所需的空間。由於系統無法接受文件,因此任何單個文件上傳都可能失敗,並且與特定客戶端無關。

如果您需要一次上傳所有多個文件,那麼您應該使用Multiple File Uploading

正如上一節所述,上傳多個文件的一種方法是簡單地將多個表單輸入元素的文件類型全部用不同的名稱。這需要許多setter方法,這等於上傳文件數量的3倍。另一種選擇是使用Arraysjava.util.Lists


您可以配置fileUpload interceptor限制上傳文件

maximumSize(可選)的大小 - 最大尺寸(以字節爲單位)的 攔截器將允許文件引用是在行動上設置。請注意, 這與 struts.properties中的各種屬性無關。默認約爲2MB。


然後你就可以配置自攔截返回的自定義消息。

假設 動作實現了ValidationAware,此攔截器將添加幾個字段錯誤。這些錯誤消息基於 存儲在struts-messages.properties中的幾個i18n值,爲所有i18n請求處理的默認文件爲 。您可以通過以下按鍵提供文本覆蓋這些消息的文本 :

  • struts.messages.error.uploading - 當文件無法上傳

  • struts.messages.error.file.too.large時發生的一般錯誤 - 發生在上傳的文件過大

  • struts.messages.error.content.type.not.allowed - 發生時,上傳的文件不符合預期的內容類型指定

  • struts.messages.error.file.extension.not.allowed - 發生時,上傳的文件不符合預期的文件擴展名指定


多個文件由單個請求被上傳。要控制請求的總大小,您可以使用常量或屬性struts.multipart.maxSize。例如,常量將每個請求的限制設置爲1M。

<constant name="struts.multipart.maxSize" value="1000000" /> 

+0

感謝@Roman C,現在我得到了什麼,我需要做的美好憧憬。 – Carol