【发布时间】:2011-11-17 16:37:46
【问题描述】:
我想在 Struts2 中仅对带有 .key 扩展名的文件限制文件上传操作。如果我在 struts.xml 中的 fileUpload 拦截器中将文件类型设置为 application/octet-stream ,则它允许上传具有上述内容类型的所有文件而不考虑扩展名,但我的要求是将扩展名限制为 .key.
【问题讨论】:
标签: struts2
我想在 Struts2 中仅对带有 .key 扩展名的文件限制文件上传操作。如果我在 struts.xml 中的 fileUpload 拦截器中将文件类型设置为 application/octet-stream ,则它允许上传具有上述内容类型的所有文件而不考虑扩展名,但我的要求是将扩展名限制为 .key.
【问题讨论】:
标签: struts2
有两种方法可以实现上述目标。 声明式和编程式,为了声明式地限制文件类型,可以将逗号分隔的 allowedTypes 列表指定为 fileUpload 拦截器参数
<action name="fileUpload" class="com.example.UploadAction">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="fileUpload">
<param name="allowedTypes"></param>
</interceptor-ref>
<interceptor-ref name="validation"/>
<interceptor-ref name="workflow"/>
<result name="success"</result>
</action>
避免需要配置拦截器的更灵活的方法是以编程方式检查它 以编程方式限制文件类型意味着使用通过 setXContentType(String contentType) 方法传入 Action 类的信息。
【讨论】:
我已经得到了答案。您需要在 fileUpload 拦截器中使用另一个名为“allowedExtensions”的参数类型。以逗号分隔值输入您愿意允许的所有扩展名。您还可以为特定错误添加自定义消息。请参考Struts official site for file upload interceptor。下面是语法。
<interceptor-ref name="fileUpload">
<param name="allowedExtensions">key</param>
</interceptor-ref>
【讨论】: