Struts2.0文件上傳-文件尺寸問題

          Posted on 2007-10-31 17:18 puras 閱讀(5179) 評論(3)  編輯  收藏 所屬分類: Struts2.0

          近日在工作中一直使用Struts2.0,對它的了解也是逐漸的增多哦,嗯嗯,好事一件.不過,在使用中也遇到了一些問題,一般的基本都搞定了,只有一個,到現(xiàn)在也沒弄明白,實在不行,就得查看源代碼了......

          問題是這樣的:

          上傳文件,需要限制上傳文件的大小,這個可以在配置Action的interceptor來解決,只需設(shè)置一下maximumSize的值就可以了,我這里設(shè)置的是1048576(1M).

          如果我現(xiàn)在上傳一個大小為1.5M的文件,會報文件尺寸過大的錯誤,這個錯誤的顯示信息可以通過在全局的國際資源文件中配置:struts.messages.error.file.too.large.這時沒有什么問題.

          但只時我上傳一個大小為5M的文件,就會報一個

        1. the request was rejected because its size (xxxxxx) exceeds the configured maximum (xxxxxx)的錯誤.而且我上傳頁面中原有的參數(shù)全部丟失.比如我修改一條記錄時傳到上傳頁面的ID值.(這里就是我沒搞明白的地方,數(shù)據(jù)為什么會丟)
        2. 這里是因為Struts2.0默認(rèn)的上傳文件的大小是2M.如果上傳超過這個大小的就會報錯.可以通過在struts.xml中修改默認(rèn)的上傳文件大小:<constant name="struts.multipart.maxSize" value="5242880" />,我在這里設(shè)置成了5M,允許上傳5M的文件.

          如果用戶上傳的文件,超過了在Action中Iterceptor中的大小,而小于Struts.xml文件中設(shè)置的大小,一切正常;一旦上傳的文件超過了Struts.xml文件中設(shè)置的大小,問題就出現(xiàn)了,雖然也能正常的返回上傳頁,但數(shù)據(jù)丟失......這個受不了啊

          哪位高人也遇到過這種問題,并且解決了,不妨告訴小弟一下,^_^,小弟這里先謝謝了....

          PS:暫時將Struts.xml中設(shè)置了1G,如果用戶要上傳再大的文件,那也沒辦法了,抓緊時間搞定它....唉.

          Feedback

          # re: Struts2.0文件上傳-文件尺寸問題[未登錄]  回復(fù)  更多評論   

          2007-10-31 23:29 by jezz
          我也遇到了,我做的批量上傳,好象只能設(shè)置它總共上傳的大小,不能設(shè)置每個上傳的大小!而且很大也不報錯,只在控制臺報錯!

          # re: Struts2.0文件上傳-文件尺寸問題  回復(fù)  更多評論   

          2008-08-28 14:58 by 11
          這個問題搞定了沒?我也遇到了!

          # re: Struts2.0文件上傳-文件尺寸問題  回復(fù)  更多評論   

          2009-02-20 09:14 by 比爾
          套件中struts2-core-2.0.11.jar/org.apache/struts2/default.properties:
          ...
          #預(yù)設(shè)上傳檔案大小最大為2087152k,即2MB
          struts.multipart.maxSize=2097152
          ...

          以上預(yù)設(shè)值可在struts.xml覆寫掉:
          ex:
          <struts>
          <constant name="struts.multipart.maxSize"
          value="1048576000" />

          <action name="xxx" class="xxxAction"
          method="xxxMethod">
          <result name="xxx">/jsp/XXX.jsp</result>
          <result name="input">/jsp/OOO.jsp</result>

          <interceptor-ref name="fileUpload">
          <param name="maximumSize">5242880</param>
          <param name="allowedTypes">
          設(shè)mime-type</param>
          </interceptor-ref>
          <interceptor-ref name="defaultStack"></interceptor-ref>
          </action>
          </struts>
          =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
          其中<constant name="struts.multipart.maxSize"
          value="1048576000" />設(shè)的是所有檔案的大小上限

          而,
          <action>
          <interceptor-ref name="fileUpload">
          <param name="maximumSize">5242880</param>
          </interceptor-ref>
          </action>
          因為每個上傳檔案都會被攔截器攔截
          ,所以設(shè)的是單一檔案大小

          當(dāng)有exception時,如果action繼承至ActionSupport,
          則會forward到input,所以要配置:
          <result name="input">/jsp/OOO.jsp</result>

          =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
          當(dāng)
          <struts>
          <package name="res" namespace="/" extends="struts-default">
          </struts>
          則會繼承套件中struts2-core-2.0.11.jar
          的struts-default.xml(裡面有一個package就是struts-default),
          fileUpload就是其中的一個interceptor,被包覆在defaultStack
          因為action有指定interceptor(為fileUpload),
          所以並不會像預(yù)設(shè)就會有defaultStack的interceptor(只會有指定的intercpeptor)

          為了讓該action可以有其預(yù)設(shè)的其它攔截器,所以要再加default的其它攔截器:
          <interceptor-ref name="defaultStack"></interceptor-ref>

          posts - 47, comments - 124, trackbacks - 0, articles - 0

          Copyright © puras

          主站蜘蛛池模板: 安平县| 左贡县| 通许县| 来宾市| 海阳市| 雷州市| 舟曲县| 漠河县| 临江市| 大安市| 娄烦县| 科技| 桃园县| 沽源县| 府谷县| 淳化县| 邵东县| 桂平市| 松溪县| 买车| 溆浦县| 客服| 开封县| 新晃| 潢川县| 佛学| 万源市| 吉林省| 平顶山市| 临漳县| 广东省| 祥云县| 出国| 隆化县| 静乐县| 宝山区| 舒兰市| 松原市| 伊金霍洛旗| 兴文县| 随州市|