struts2(六) 文件上傳和下載
前面對文件下載提過一點點,這裏正好要講文件上傳,就放在一起在說一遍。
--WH
一、單文件上傳
在沒學struts2之前,我們要寫文件上傳,非常麻煩,需要手動一步步去獲取表單中的各種屬性,然後在進行相應的處理,而在struts2中就不需要了,因為有一個fileUpload攔截器幫我們全做完了。我們只需要添加一點點信息,就可以完成上傳的功能。
1、Action中需要提供三個屬性
File fieldName; //文件表單項名稱,也就是上傳控件所填寫的name屬性名
String fileContentType; //file就使用的文件表單項名和固定ContentType,代表獲取上傳文件的類型
String fileFileName; //file同樣是fieldName+FileName(固定),代表上傳文件的文件名
比如有<input type=”file” name=”myUpload”/> 表單項名稱為: myUpload, 那麽在action中的三個屬性分別為
myUpload myUploadContentType myUploadFileName
2、在struts.xml中設置上傳的一些配置信息,
設置常量(可選)
struts.multipart.parser:指定使用的上傳組件,默認值為jakarta,表示使用commons-fileupload組件,Struts2還支持cos和pell
struts.multipart.saveDir:臨時目錄,默認為Tomcat中的work目錄
struts.multipart.maxSize:整個請求大小限制,默認值為2097152b(1b等於8bit,1kb=1024byte,1M=1024kb), 也就是2M,這個是限制整個請求的大小,而不是單一文件的大小
fileUploadl攔截器三個參數(action中以param來設置值,可選)
maximumSize:上傳的單個文件的大小限制 默認2M
allowedTypes:允許上傳文件的類型,多個類型以逗號隔開 如果不指定,默認允許任何類型的文件上傳
allowedExtensions:允許上傳文件的擴展名,多個擴展名以逗號隔開 如果不指定,默認允許任何類型的文件上傳
3、jsp頁面中form表單的enctype需要指定為 enctype="multipart/form-data"
4、前面3步完成後,只需要在action中創建保存上傳文件的位置,然後將其放入進去即可,fileUpload攔截器已經幫我們將各種參數獲取到了。
JSP
struts.xml
action
上傳的文件會放置在tomcat中該項目的WEB-INF的pictrue文件夾下。
二、多文件上傳
會有兩種解決方案
第一種,比較煞筆的,多寫幾個上傳框,類似這樣
jsp 註意name要同名
action
這樣就可以選擇多個文件同時上傳了,但是我是從來沒見過這種多文件上傳的,哈哈,所以用第二種方式,只有一個上傳框,能同時選取多個文件一起上傳,
第二種:使用 uploadify 插件
三、文件下載。
在講解strust.xml中的action的resultType時就講過一個stream的結果類型,該類型就是用來下載的。
strust.xml
action
需要編寫getPic(),和getFileName()這兩個方法,一個是獲取輸入流,一個是獲取中文名。其他的該怎麽寫就怎麽寫。
struts2(六) 文件上傳和下載