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

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

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

          問題是這樣的:

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

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

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

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

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

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

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

          Feedback

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

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

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

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

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

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

          以上預設值可在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">
          設mime-type</param>
          </interceptor-ref>
          <interceptor-ref name="defaultStack"></interceptor-ref>
          </action>
          </struts>
          =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
          其中<constant name="struts.multipart.maxSize"
          value="1048576000" />設的是所有檔案的大小上限

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

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

          =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

          <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),
          所以並不會像預設就會有defaultStack的interceptor(只會有指定的intercpeptor)

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

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

          Copyright © puras

          主站蜘蛛池模板: 永和县| 巴塘县| 新源县| 大埔区| 呼和浩特市| 三都| 稷山县| 峡江县| 马关县| 凭祥市| 尉犁县| 元谋县| 九龙县| 三门峡市| 宜都市| 长垣县| 响水县| 宣威市| 望城县| 平塘县| 睢宁县| 平果县| 固镇县| 宜宾县| 丹东市| 宿迁市| 酉阳| 吴江市| 景德镇市| 麟游县| 峨边| 同心县| 视频| 枣强县| 景宁| 芮城县| 武功县| 浏阳市| 潜山县| 且末县| 钟山县|