用STRTUS2写了一个文件上传 现在想让用户只允许上传图片类型的 于是就在STRUTS2的ACTION配置文件中写了一个拦截器如下<action name="SaveXueSheng" class="xueShengAction" method="SaveXueSheng"> <!-- 配置fileUpload的拦截器 -->
             <interceptor-ref name="fileUpload">
                 <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg</param>
                 <param name="maximumSize">2000</param> 
             </interceptor-ref> 
             <interceptor-ref name="defaultStack"/> <result name="success">/success.jsp</result>
<result name="error">/index.jsp</result>
</action>以上就是配置好的上传限制拦截器 可是不管用呵呵 上传EXE文件都可以。网上找遍了 都是抄袭李刚哪本书说的 但是都解决不了,所以看这里那位有解决办法的经验分享一下,其他的问题不用回答,例如使用JS之类的去做就免了,再次感谢。

解决方案 »

  1.   

    没用过STRTUS2 ,STRTUS1的时候我都写filter
      

  2.   

    应该是先引用默认拦截器栈,再引用fileUpload拦截器
      

  3.   

    <interceptor-ref name="defaultStack"/>
    <interceptor-ref name="fileUpload">
    默认的拦截器放放后面的话,自己写的拦截器就不起作用了
      

  4.   

    struts2是支持这么配置的,当你配制成<param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg </param> 比如上传了一个xxx.log文件,这个文件的contentType是application/octet-stream,后台会显示错误
    严重: Content-Type not allowed: file "xxx.log" "upload_xxxx.tmp" application/octet-stream他应该不会返回input,还是可以进入到action,只不过得到的内容都是空的,如果想增加提示,需要在资源文件中定义
    struts.messages.error.content.type.not.allowed="xxxxxxxxxxxxxxxxxxx"
      

  5.   

    <action name="upload" class="kingbox.Upload">
                <result>../.jsp</result>
                <interceptor-ref name="fileUpload">
                 <param name="maximumSize">4096000</param>
                 <param name="allowedTypes">application/vnd.ms-excel</param> 
                </interceptor-ref>
                <interceptor-ref name="defaultStack"></interceptor-ref>
                <result name="input">../.jsp</result>
    </action>
    application/vnd.ms-excel为excel文件,其他类型限制请到tomcat中去寻找
      

  6.   

    第一种方法 用javascript限制扩展名,这个不用多说了吧,获取到value然后根据.攫取扩展名进行判断第二种方法 
    1 用struts2的contentType来给出提示信息,struts2的defaultStack中已经含有fileupload拦截器,如果想加入allowedTypes参数,需要从新写一个defaultstack
                <interceptor-stack name="myDefaultStack">
                    <interceptor-ref name="exception"/>
                    <interceptor-ref name="alias"/>
                    <interceptor-ref name="servletConfig"/>
                    <interceptor-ref name="i18n"/>
                    <interceptor-ref name="prepare"/>
                    <interceptor-ref name="chain"/>
                    <interceptor-ref name="debugging"/>
                    <interceptor-ref name="profiling"/>
                    <interceptor-ref name="scopedModelDriven"/>
                    <interceptor-ref name="modelDriven"/>
                    <interceptor-ref name="fileUpload">
      <param name="allowedTypes">
         image/png,image/gif,image/jpeg
      </param>
                    </interceptor-ref>
                    <interceptor-ref name="checkbox"/>
                    <interceptor-ref name="staticParams"/>
                    <interceptor-ref name="actionMappingParams"/>
                    <interceptor-ref name="params">
                      <param name="excludeParams">dojo\..*,^struts\..*</param>
                    </interceptor-ref>
                    <interceptor-ref name="conversionError"/>
                    <interceptor-ref name="validation">
                        <param name="excludeMethods">input,back,cancel,browse</param>
                    </interceptor-ref>
                    <interceptor-ref name="workflow">
                        <param name="excludeMethods">input,back,cancel,browse</param>
                    </interceptor-ref>
                </interceptor-stack>
    </interceptors>
    <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>2 定义资源文件,覆盖消息文件的消息提示
    在struts.properties中加入struts.custom.i18n.resources=globalMessages
    3 在源文件夹下新建globalMessages.properties文件,在里面加入
    struts.messages.error.content.type.not.allowed=上传文件的文件只支持 ipng、gif、jpeg格式
    4 在页面中加入消息提示,例如:
        <s:file name="file"theme="simple"/>
        <s:fielderror name="file"></s:fielderror>这样当上传其他的type的时候,会给出提示:上传文件的文件只支持 ipng、gif、jpeg格式
      

  7.   

    楼上的朋友你好 谢谢你的回复 可是还是有问题 过滤器依然没有反应无法过滤非图片格式的问题上传 我照你上面的方法做了 可是在控制台里面只能看到 严重: ?????????????????????????????? ipng???gif???jpeg??????
    乱码 其他的什么都没有 一个MP3文件还是被我传了上去。你的拦截器我修改了一下 以下是代码
    <interceptors>
     <interceptor-stack name="myDefaultStack">
                    <interceptor-ref name="fileUpload">
                      <param name="allowedTypes">
                         image/png,image/gif,image/jpeg
                      </param>
                    </interceptor-ref>
                </interceptor-stack>
            </interceptors>
    上面是拦截器站  下面是我的ACTIONl里的配置
    <action name="SaveXueSheng" class="xueShengAction" method="SaveXueSheng">
    <!-- 配置fileUpload的拦截器 -->
                   <interceptor-ref name="defaultStack"/>
                 <interceptor-ref name="myDefaultStack"/>
              
               
    <result name="success">/success.jsp</result>
    <result name="error">/index.jsp</result>
    </action>麻烦请指教
      

  8.   

    1 资源文件中的中文提示信息,需要进行UNICODE编码转化,用native2ascii.exe转化一下即可
    比如:上传文件的文件只支持 ipng、gif、jpeg格式
    转换后变成:\u4E0A\u4F20\u6587\u4EF6\u7684\u6587\u4EF6\u53EA\u652F\u6301 ipng\u3001gif\u3001jpeg\u683C\u5F0F2 我在上面已经说过了defaultStack已经存在fileupload拦截器了,你那不是定义了两遍吗?拦截器的顺序很有说法,比如fileupload必须要放在validate拦截器的前面,否则不会成功
      

  9.   

    struts2的defaultStack拦截器就包含了fileUpload拦截器,不需要引入<interceptor-ref name="fileUpload">,在struts-default.xml文件中
    直接这样写看看: 
    <action name="SaveXueSheng" class="xueShengAction" method="SaveXueSheng"> 
                <interceptor-ref name="defaultStack"> 
                    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg </param> 
                    <param name="maximumSize">2000 </param> 
                </interceptor-ref> 
                
    <result name="success">/success.jsp </result> 
    <result name="error">/index.jsp </result> 
    </action> 
      

  10.   

    <action name="SaveXueSheng" class="xueShengAction" method="SaveXueSheng">
                <interceptor-ref name="fileUpload">
                    <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg,image/jpg      </param>               
                </interceptor-ref>
    <interceptor-ref name="defaultStack"/>
               
    <result name="success">/success.jsp </result>
    <result name="error">/index.jsp </result>
    </action> 
    这样就可以了