天天看點

Struts2的檔案上傳

以前感覺檔案上傳不怎麼會,都是從網上粘貼的代碼就行了,這兩天學習了下Struts2的檔案上傳,感覺很好用啊!記錄以便己用。

在JavaEE中的檔案上傳需要注意一點的是就是:表單的enctype屬性了。

enctype主要有三種屬性:

1、application/x-www-form-urlencoded:這個是預設的編碼方式,它隻處理表單域中的value值,采用這種方式會把表單域中的值處理成URL的形式。

2、multipart/form-data:這種方式會以二進制的方式來處理表單中的資料,它也會把檔案域指定的檔案封裝到請求參數中去。

3、text/plain:當表單action屬性為mailto:URL的形式的時候使用它比較友善,它主要是用于直接通過表單發送郵件的情況。

使用Struts2上傳檔案主要依賴的元件是common-fileupload.jar和common-io-*.jar,而且在JSP中的檔案類型的Input中,在Struts2中相對應着三個屬性值分别為:檔案類型:***,String類型:***FileName,String類型:***ContentType

JSP中表單如下:

送出給Struts2的Action

之後通過struts2的配置檔案跳轉到相應的頁面就行了,然後還需要對上傳檔案進行過濾,肯定不能讓什麼檔案都能上傳,那樣相當不安全吧!

Struts2給我們提供了一個fileUpload攔截器,使用相當友善,我隻需要在Strtus2的配置檔案中引入相應的攔截器就行了:如下:

這個地方注意的一點是引入了fileUpload攔截器之後,系統預設的攔截器就不起作用了,這時還需要我們手動的把defaultStack引入進去。

如果上傳檔案不符合我們要求的就會報錯,系統會預設提示錯誤,但是那都是英文的,對于我們使用漢語的來說不是一件好事啊!是以我們需要把英文轉換成漢語,我需要建一個國際化檔案比如:message_zh_CN.properties我們可以把報錯的資訊寫進去:

struts.messages.error.content.type.not.allowed是提示檔案不是允許的類型

struts.messages.error.file.too.large是提示檔案太大

struts.messages.error.uploading是提示未知錯誤

這樣攔截器就完成了!