用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之类的去做就免了,再次感谢。
<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之类的去做就免了,再次感谢。
<interceptor-ref name="fileUpload">
默认的拦截器放放后面的话,自己写的拦截器就不起作用了
严重: Content-Type not allowed: file "xxx.log" "upload_xxxx.tmp" application/octet-stream他应该不会返回input,还是可以进入到action,只不过得到的内容都是空的,如果想增加提示,需要在资源文件中定义
struts.messages.error.content.type.not.allowed="xxxxxxxxxxxxxxxxxxx"
<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中去寻找
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格式
乱码 其他的什么都没有 一个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>麻烦请指教
比如:上传文件的文件只支持 ipng、gif、jpeg格式
转换后变成:\u4E0A\u4F20\u6587\u4EF6\u7684\u6587\u4EF6\u53EA\u652F\u6301 ipng\u3001gif\u3001jpeg\u683C\u5F0F2 我在上面已经说过了defaultStack已经存在fileupload拦截器了,你那不是定义了两遍吗?拦截器的顺序很有说法,比如fileupload必须要放在validate拦截器的前面,否则不会成功
直接这样写看看:
<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>
<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>
这样就可以了