• Struts2实现文件上传限制大小和类型

    在网站中上传图片或者其他资源时,通常都会有一些特殊的要求,如文件大小、上传格式等。使用 Struts2 框架进行文件上传时,通过设置上传拦截器 FileUpload,同样可以实现这些功能。

    在 FileUpload 中,有三个属性可以设置,具体如下。

    • maximumSize:上传文件的最大长度(以字节为单位),默认值为 2MB。
    • allowedTypes:允许上传文件的类型,各类型之间以逗号分隔。
    • allowedExtensions:允许上传文件的扩展名,各扩展名之间以逗号分隔。

    在项目的 struts.xml 中覆盖这三个属性即可对上传的文件大小和类型进行限制。修改《Struts2单个文件上传实例》中的 struts.xml 文件,在 FileUploadAction 中添加拦截器,如下所示。

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
        <!--设置文件上传允许最大值为100MB-->
        <constant name="struts.multipart.maxSize" value="10485760"/>
        <package name="struts2" namespace="/" extends="struts-default">
            <action name="fileUpload" class="com.mengma.action.FileUploadAction">
                <result name="success">/result.jsp</result>
                <!-- 定义上传出错要跳转的页面 -->
                <result name="input">/fileUpload.jsp</result>
                <interceptor-ref name="defaultStack"><!--引用拦截器 -->
                    <param name="fileUpload.maximumSize">4194304</param><!-- 设置每一个action允许的上传文件的大小 -->
                    <!-- 当下面两个配置同时存在时,要满足下面两个条件,才能上传 -->
                    <param name="fileUpload.allowedExtensions">.txt,.doc,.jpg</param>
                                   <!-- 设置上传文件允许的后缀名,多个使用逗号分开 -->
                    <param name="fileUpload.allowedTypes">
                        text/plain,application/msword,image/jpeg
                    </param><!--设置上传允许的文件的mimeType类型,多个使用逗号分开 -->
                </interceptor-ref>
            </action>
        </package>
    </struts>

    上述代码中,首先通过设置常量 struts.multipart.maxSize 将允许上传文件的最大值设置为 10MB(Struts2 默认大小为 2MB),然后增加了上传文件出错时的跳转页面 fileUpload.jsp。

    最后通过设置 FileUpload 拦截器的三个属性,分别将上传文件的最大值设置为 4MB,上传文件的扩展名设置为 txt、doc 和 jpg,上传文件的扩展名类型设置为 text/plain、application/msword 和 image/jpeg。

    重新发布项目并访问 fileUpload.jsp 页面,在所允许的类型中选择一个文件大小超过 4MB 的文件上传时,浏览器页面的显示结果如图 1 所示。

    从图 1 中可以看出,页面中提示了文件过大的英文错误信息,由于设定的允许最大值是 4MB,当上传的文件大小超过此数值时,就会报出此错误。

    当上传一个不符合所设置的文件类型的文件(如 PDF 文件)时,浏览器页面的显示结果如图 2 所示。

    上传文件超过设定值
    图 1  上传文件超过设定值

更多...

加载中...