Struts1上傳文件的大小及類型的限制

程序要求:

1.文件上傳名不能爲空,

2.文件上傳的類型必須是java zip格式

文件上傳大小必須是5M

 

第一種方法是通過javascript校驗來限制,獲取input的value然後截取擴展名進行判斷即可。

第二種是根據struts2自帶的fileupload攔截器中提供的allowedTypes來進行限制,步驟如下:

 

1 配置fileupload攔截器

struts.xml文件中的代碼如下:

<struts>

   <!-- 常量的配置文件 -->

   <includefile="struts-constant.xml"/>

 

 

   <packagename="user"namespace="/csdn"extends="struts-default">

 

 

      <!-- 全局結果集 -->

      <global-results>

         <resultname="input">/index.jsp</result>

      </global-results>

 

 

 

      <actionname="FileAction_*"class="www.csdn.struts_upload_interceptor.action.FileAction"method="{1}">

         <interceptor-refname="fileUpload">

         <!-- 上傳文件類型的限制   上傳javazip格式文件-->

         <paramname="allowedTypes"> application/octet-stream,application/x-zip-compressed

</param>

         <!-- 上傳文件大小的設置byte爲單位  1M=1024KB=1024*1024B   5M=5242880B  默認爲2M-->

         <paramname="maximumSize">5242880</param>

         </interceptor-ref>

         <!-- 默認攔截器棧 -->

         <interceptor-refname="defaultStack"/>

         <resultname="success">/index.jsp</result>

      </action>

 

     

   </package>

</struts>

上面配置的是上傳文件類型的限制,其實共有兩個參數:

maximumSize (可選)- 這個攔截器允許的上傳到action中的文件最大長度(以byte爲單位).注意這個參數和在webwork.properties中定義的屬性沒有關係,默認2MB

 

allowedTypes (可選)- 以逗號分割的contentType類型列表(例如text/html),這些列表是這個攔截器允許的可以傳到action中的contentType.如果沒有指定就是允許任何上傳類型.Tomcat/conf/web.xml文件中就有文件的類型的名稱

文件大小的設置需在常量配置xml的文件中進行如下配置:

<!-- 設置文件上傳的大小 value必須大於或等於攔截器中的值 -->

   <constantname="struts.multipart.maxSize"value="5242880"></constant>

 

2 jsp頁面定義如下(testFileUpload.jsp)

<body>

    上傳文件<br>

    <hr>

    錯誤信息:

    <s:fielderror></s:fielderror><br>

    action錯誤信息:

    <s:actionerror/>

    <hr>

    <div>

    <form action="${pageContext.request.contextPath }/csdn/FileAction_upload.action"method="post"enctype="multipart/form-data">

   

         文件上傳:<inputname="upload"type="file"><br>

          <inputtype="submit"value="上傳">

    </form>

    </div>

 

  </body>

添加struts2標籤:

<%@ tagliburi="/struts-tags"prefix="s"%>

3 後臺的FileAction聲明如下

 

public class FileAction extends ActionSupport {

  

   private Filefile;//上傳的文件

   private StringcontentType;//文件類型

   private Stringfilename;//文件名

  

   private Stringpath;

  

  

  

   public String getPath() {

      return path;

   }

 

   public void setPath(String path) {

      this.path = path;

   }

 

   public void setUpload(File file) {

      this.file = file;

   }

  

  

  

   public void setUploadFileName(String filename) {

      this.filename = filename;

   }

  

   public String upload()

   {

      //創建文件路徑

      String path=ServletActionContext.getServletContext().getRealPath("WEB-INF/uploads");

      //上傳路徑的文件

      File pfile=new File(path);

      //文件的路徑創建

      if(!pfile.exists())

      {

         pfile.mkdirs();

      }

     

      try {

         FileUtils.copyFile(file,new File(pfile,System.currentTimeMillis()+"_"+filename));

         System.out.println("文件上傳成功。。。。。。。。。。");

         returnSUCCESS;

      } catch (IOException e) {

         // TODO Auto-generatedcatch block

         e.printStackTrace();

      }

      return INPUT;

   }

 

   public String getContentType() {

      return contentType;

   }

 

   public void setContentType(String contentType) {

      this.contentType = contentType;

   } 

         

}
注意:如果jsp中file的name="xxx",那麼後臺action中的屬性要做相應更改爲

private File xxx;

private String xxxContentType;

private String xxxFileName;

同時注意大小寫一定要一致

4.文件名不能爲空的問題:

在FileAction文件的同目錄下,建一個FileAction-validation.xml,編寫代碼如下:

<fieldname="upload">

        <field-validatortype="requiredstring">

          <paramname="trim">true</param>

          <message>文件名不能爲空</message>

        </field-validator>

     </field>

 

運行效果圖:

1

2.上傳的文件類型不對,

3.文件名爲空


出現的bug及解決:

bug:上傳一個文件後,總會出現一個信息錯誤,即出現文件名不能爲空的提示信息

bug的原因:文本框中的value值本來就是空的 所以文件名不能爲空的問題不能在第4步中寫,直接在Action中進行判斷就可。

解決:在FileAction的upload方法中進行以下判斷:

if("".equals(file) || file==null)
  {
   System.out.println("文件名不能爲空");
  }

再運行,程序則正常顯示了,不會再出現文件名不能爲空的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章