最近做SSH项目要实现文件上传的功能于是就用到了Struts2中的拦截器对文件的大小和类型进行筛选,我要求用户只能上传图片格式的文件,于是在struts.xml中使用了以下代码:
<package name="upload2" extends="struts-default"> <action name="upload2" class="com.ljq.action.UploadAction2" method="execute"> <!-- 动态设置savePath的属性值 --> <param name="savePath">/images</param> <result name="success">/WEB-INF/page/message.jsp</result> <result name="input">/upload/upload.jsp</result> <interceptor-ref name="fileUpload">
</interceptor-ref> <!-- 默认拦截器必须放在fileUpload之后,否则无效 --> <interceptor-ref name="defaultStack" /> </action> </package> 结果发现每次从jsp页面上传总是会跳到name="input"的result中,让我很是头疼。我就试着把拦截器中的两行参数注释掉,代码如下:<!-- 文件过滤 --> <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param> <!-- 文件大小, 以字节为单位 --> <param name="maximumSize">1025956</param>
<!-- 文件过滤 --> <!-- <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param> --> <!-- 文件大小, 以字节为单位 --> <!-- <param name="maximumSize">1025956</param> -->
果然可以上传成功了。接着我进一步分别注掉这两行,看出还是限制文件类型那一行出了问题。在网上查了另外一种写法,代码如下:<param name="allowedTypes">image/bmp,image/x-png,image/gif,image/pjpeg</param>
依旧行不通。。。没办法,既然限制文件类型总是不好使那我只能换另一种方式:设置允许上传的文件后缀名
设置上传的文件后缀名要用到name="allowedExtensions"这个参数,代码如下:
运行成功!虽然问题算是解决了,但是还是没弄明白为什么用name="allowedTypes"这个参数不好用,希望有明白的高手予以解答,不胜感激!<!-- 允许后缀名为png,bmp,jpg的文件上传 --> <param name="allowedExtensions"> png,bmp,jpg </param>