Struts2.0文件上傳-文件尺寸問(wèn)題

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

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

          問(wèn)題是這樣的:

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

          如果我現(xiàn)在上傳一個(gè)大小為1.5M的文件,會(huì)報(bào)文件尺寸過(guò)大的錯(cuò)誤,這個(gè)錯(cuò)誤的顯示信息可以通過(guò)在全局的國(guó)際資源文件中配置:struts.messages.error.file.too.large.這時(shí)沒(méi)有什么問(wèn)題.

          但只時(shí)我上傳一個(gè)大小為5M的文件,就會(huì)報(bào)一個(gè)

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

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

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

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

          Feedback

          # re: Struts2.0文件上傳-文件尺寸問(wèn)題[未登錄](méi)  回復(fù)  更多評(píng)論   

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

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

          2008-08-28 14:58 by 11
          這個(gè)問(wèn)題搞定了沒(méi)?我也遇到了!

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

          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>
          因?yàn)槊總€(gè)上傳檔案都會(huì)被攔截器攔截
          ,所以設(shè)的是單一檔案大小

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

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

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

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

          Copyright © puras

          主站蜘蛛池模板: 乌海市| 江陵县| 西乌珠穆沁旗| 浦县| 娄烦县| 通化市| 鄱阳县| 牡丹江市| 怀远县| 大同县| 九龙城区| 三穗县| 安乡县| 涡阳县| 连山| 北海市| 西青区| 肥西县| 德昌县| 赣榆县| 湖北省| 湘西| 额尔古纳市| 泸西县| 花莲县| 万安县| 措美县| 阿拉尔市| 哈尔滨市| 石狮市| 牡丹江市| 青浦区| 广德县| 平阳县| 集安市| 神池县| 榕江县| 小金县| 叙永县| 青神县| 麻城市|