Struts2 多種方式接收表單文件

1. 經過定義Action屬性,接收文件html

 html: <input type="file" name="file1">數組

action定義與input name相同的屬性服務器

 private File file1;
 private String file1FileName;
 private String file1ContentType;app

表單提交後,Action會自動給屬性賦值,FileName,ContentType能夠不定義,可是File file1必須定義;編碼

多文件上傳:orm

html: 須要定義多個name相同的inputhtm

<input type="file" name="file1">對象

<input type="file" name="file1">ip

action :文件接收對象定義爲Listget

private List<File> file1;
 private List<String> file1FileName;
 private List<String> file1ContentType;

表單提交後能夠文件集合對象:

file1:

[\temp\upload_d312fc99_d4d5_4eec_a90a_666476e67579_00000031.tmp, \temp\upload_d312fc99_d4d5_4eec_a90a_666476e67579_00000032.tmp]

file1FileName:[1.jpg, 2.png]

file1ContentType : [image/jpeg, image/png]

經過文件集合的index獲取對應的文件對象;

2. 經過Map接收文件對象

有時咱們並不但願在action中定義太多的屬性對象來接收form數據,由於那樣看起來很不爽,或者若是咱們上傳多個文件,每一個文件input的name都不同,那麼咱們是否是就在action中定義不少個File 屬性接收文件,很顯然這樣是不可取;

經過在action定義一個Map 屬性變量,不只能夠接收多文件,並且能夠接收頁面動態產生的input file 對象;

如:

html :

<input type="file" name="fileMap.file1"><br/><br/>
<input type="file" name="fileMap.file1"><br/><br/>
<input type="file" name="fileMap.file2"><br/><br/>

action :

private Map<String,Object> fileMap;

表單提交後 fileMap接收到form數據以下:

    file2FileName : [3.png]
    file2ContentType : [image/png]
    file2 : [\temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000016.tmp]

    file1FileName : [1.jpg,2.png]
    file1ContentType : [image/jpeg,image/png]
    file1 :     [

        \temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000014.tmp

        ,\temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000015.tmp

]

.tmp是服務器臨時文件,map裏面的value值都是以數組形式存儲,表單名稱成相同的文件會放到同一數組中,這樣不管多文件仍是單文件均可以完成同一接收;

3. 經過Request包裝類獲取文件

Struts2請求包裝類StrutsRequestWrapper,MultiPartRequestWrapper

當form enctype="multipart/form-data"時,HttpServletRequest實現類爲MultiPartRequestWrapper;

普通表單提交時,HttpServletRequest實現類爲StrutsRequestWrapper;

示例:

html :

<input type="file" name="file1"><br/><br/>
<input type="file" name="file1"><br/><br/>
<input type="file" name="file2"><br/><br/>

action 處理以下:

//獲取request對象

HttpServletRequest request=ServletActionContext.getRequest();

//判斷request實現類

if(request instanceof MultiPartRequestWrapper){
   try {
    MultiPartRequestWrapper multiRequest=(MultiPartRequestWrapper) request;
    String[] fileNames=multiRequest.getFileNames(fieldName);
    String[] contentTypes=multiRequest.getContentTypes(fieldName);
    File[] files=multiRequest.getFiles(fieldName);
   } catch (Exception e) {
    // TODO: handle exception
   }
  }

fieldName爲表單name值;

當fieldName="file1" , 獲取file1文件:

String[] fileNames=[1.jpg,2.png];
String[] contentTypes = [image/jpeg,image/png];
File[] files =  [

        \temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000014.tmp

        ,\temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000015.tmp

]

當fieldName="file2" , 獲取file2文件:

String[] fileNames = [3.png];
String[] contentTypes =  [image/png];
File[] files= [\temp\upload_6dc13bae_7ae0_4f3b_98a4_1ce228a26405_00000016.tmp];

方法2 與 方法3 都能實現動態接收任意文件,而相比之下,方法2看着有些彆扭,並不符合常規編碼習慣,應該不多有程序猿使用map接收數據;而方法3則相比較靈活; 

相關文章
相關標籤/搜索