隨筆 - 6  文章 - 129  trackbacks - 0
          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          常用鏈接

          留言簿(14)

          隨筆檔案(6)

          文章分類(467)

          文章檔案(423)

          相冊

          收藏夾(18)

          JAVA

          搜索

          •  

          積分與排名

          • 積分 - 827218
          • 排名 - 49

          最新評論

          閱讀排行榜

          評論排行榜

          在Struts2中實(shí)現(xiàn)文件上傳(二)

           發(fā)布者:[IT電子教育門戶]   

          發(fā)布運(yùn)行應(yīng)用程序,在瀏覽器地址欄中鍵入:http://localhost:8080/Struts2_Fileupload/FileUpload.jsp,出現(xiàn)圖示頁面:

           
          清單7 FileUpload頁面

          選擇圖片文件,填寫Caption并按下Submit按鈕提交,出現(xiàn)圖示頁面:

           
          清單8 上傳成功頁面

          更多配置
          在運(yùn)行上述例子,如果您留心一點(diǎn)的話,應(yīng)該會(huì)發(fā)現(xiàn)服務(wù)器控制臺有如下輸出:

          Mar 20 , 2007 4 : 08 : 43 PM org.apache.struts2.dispatcher.Dispatcher getSaveDir
          INFO: Unable to find 'struts.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir
          Mar 20 , 2007 4 : 08 : 43 PM org.apache.struts2.interceptor.FileUploadInterceptor intercept
          INFO: Removing file myFile C:\Program Files\Tomcat 5.5 \work\Catalina\localhost\Struts2_Fileupload\upload_251447c2_1116e355841__7ff7_00000006.tmp 清單9 服務(wù)器控制臺輸出
          上述信息告訴我們,struts.multipart.saveDir沒有配置。struts.multipart.saveDir用于指定存放臨時(shí)文件的文件夾,該配置寫在struts.properties文件中。例如,如果在struts.properties文件加入如下代碼:

          struts.multipart.saveDir = /tmp 清單10 struts配置
          這樣上傳的文件就會(huì)臨時(shí)保存到你根目錄下的tmp文件夾中(一般為c:\tmp),如果此文件夾不存在,Struts 2會(huì)自動(dòng)創(chuàng)建一個(gè)。

          錯(cuò)誤處理
          上述例子實(shí)現(xiàn)的圖片上傳的功能,所以應(yīng)該阻止用戶上傳非圖片類型的文件。在Struts 2中如何實(shí)現(xiàn)這點(diǎn)呢?其實(shí)這也很簡單,對上述例子作如下修改即可。

          首先修改FileUpload.jsp,在<body>與<s:form>之間加入“<s:fielderror />”,用于在頁面上輸出錯(cuò)誤信息。

          然后修改struts.xml文件,將Action fileUpload的定義改為如下所示:

                  < action name ="fileUpload" class ="tutorial.FileUploadAction" >
                      < interceptor-ref name ="fileUpload" >
                          < param name ="allowedTypes" >
                              image/bmp,image/png,image/gif,image/jpeg
                          </ param >
                      </ interceptor-ref >
                      < interceptor-ref name ="defaultStack" />           
                      < result name ="input" > /FileUpload.jsp </ result >
                      < result name ="success" > /ShowUpload.jsp </ result >
                  </ action > 清單11 修改后的配置文件
          顯而易見,起作用就是fileUpload攔截器的allowTypes參數(shù)。另外,配置還引入defaultStack它會(huì)幫我們添加驗(yàn)證等功能,所以在出錯(cuò)之后會(huì)跳轉(zhuǎn)到名稱為“input”的結(jié)果,也即是FileUpload.jsp。

          發(fā)布運(yùn)行應(yīng)用程序,出錯(cuò)時(shí),頁面如下圖所示:

           
          清單12 出錯(cuò)提示頁面

          上面的出錯(cuò)提示是Struts 2默認(rèn)的,大多數(shù)情況下,我們都需要自定義和國際化這些信息。通過在全局的國際資源文件中加入“struts.messages.error.content.type.not.allowed=The file you uploaded is not a image”,可以實(shí)現(xiàn)以上提及的需求。對此有疑問的朋友可以參考我之前的文章《在Struts 2.0中國際化(i18n)您的應(yīng)用程序》。

          實(shí)現(xiàn)之后的出錯(cuò)頁面如下圖所示:

           
          清單13 自定義出錯(cuò)提示頁面

          同樣的做法,你可以使用參數(shù)“maximumSize”來限制上傳文件的大小,它對應(yīng)的字符資源名為:“struts.messages.error.file.too.large”。

          字符資源“struts.messages.error.uploading”用提示一般的上傳出錯(cuò)信息。

          多文件上傳
          與單文件上傳相似,Struts 2實(shí)現(xiàn)多文件上傳也很簡單。你可以將多個(gè)<s:file />綁定Action的數(shù)組或列表。如下例所示。

          < s:form action ="doMultipleUploadUsingList" method ="POST" enctype ="multipart/form-data" >
              < s:file label ="File (1)" name ="upload" />
              < s:file label ="File (2)" name ="upload" />
              < s:file label ="FIle (3)" name ="upload" />
              < s:submit />
          </ s:form > 清單14 多文件上傳JSP代碼片段
          如果你希望綁定到數(shù)組,Action的代碼應(yīng)類似:

               private File[] uploads;
               private String[] uploadFileNames;
               private String[] uploadContentTypes;

               public File[] getUpload()  { return this .uploads; }
                public void setUpload(File[] upload)  { this .uploads = upload; }
           
                public String[] getUploadFileName()  { return this .uploadFileNames; }
                public void setUploadFileName(String[] uploadFileName)  { this .uploadFileNames = uploadFileName; }
           
                public String[] getUploadContentType()  { return this .uploadContentTypes; }
                public void setUploadContentType(String[] uploadContentType)  { this .uploadContentTypes = uploadContentType; } 清單15 多文件上傳數(shù)組綁定Action代碼片段
          如果你想綁定到列表,則應(yīng)類似:

               private List < File > uploads = new ArrayList < File > ();
               private List < String > uploadFileNames = new ArrayList < String > ();
               private List < String > uploadContentTypes = new ArrayList < String > ();

               public List < File > getUpload()  {
                   return this .uploads;
              }
                public void setUpload(List < File > uploads)  {
                   this .uploads = uploads;
              }
           
                public List < String > getUploadFileName()  {
                   return this .uploadFileNames;
              }
                public void setUploadFileName(List < String > uploadFileNames)  {
                   this .uploadFileNames = uploadFileNames;
              }
           
                public List < String > getUploadContentType()  {
                   return this .uploadContentTypes;
              }
                public void setUploadContentType(List < String > contentTypes)  {
                   this .uploadContentTypes = contentTypes;
              } 清單16 多文件上傳列表綁定Action代碼片段
          總結(jié)
          在Struts 2中實(shí)現(xiàn)文件上傳的確是輕而易舉,您要做的只是使用<s:file />與Action的屬性綁定。這又一次有力地證明了Struts 2的簡單易用。



          posted on 2007-09-19 22:14 Ke 閱讀(2525) 評論(0)  編輯  收藏 所屬分類: struts 2
          主站蜘蛛池模板: 阜新市| 沿河| 枞阳县| 德江县| 呈贡县| 东方市| 宣武区| 涞源县| 肇源县| 桃江县| 临桂县| 仁寿县| 昌宁县| 城固县| 镇赉县| 板桥市| 白银市| 广宗县| 囊谦县| 巧家县| 通许县| 张家口市| 阿拉尔市| 抚顺市| 巫溪县| 乌拉特后旗| 阿拉善盟| 泸定县| 将乐县| 志丹县| 闸北区| 永登县| 龙口市| 浠水县| 来宾市| 安岳县| 吴忠市| 杭州市| 海伦市| 河曲县| 广德县|