我可以使用以下简单代码上传文件,但我需要强制用户上传特定类型的文件。目前,用户可以上传任何类型的文件,我可以检查后端的扩展名,但我需要强制他们首先只上传图像。我应该如何以允许浏览的方式进行文件(*。图像)不是所有文件(*。*)
<s:form method="POST" enctype="multipart/form-data" action="upload">
<s:file name="file" label="Upload Image"/>
...
答案 0 :(得分:1)
您可以使用HTML <input type="file" />
的{{3}}。
accept
如果type属性的值是file,则此属性指示服务器接受的文件类型;否则就是 忽略。该值必须是以逗号分隔的唯一内容列表 类型说明符:
- 以STOP字符(U + 002E)开头的文件扩展名。 (例如:“.jpg; .png; .doc”)
- 没有扩展名的有效MIME类型
- 表示声音文件的音频/ *( HTML5 )
- 视频/ *代表视频文件( HTML5 )
- 图像/ *代表图像文件( HTML5 )
它也适用于<s:file />
因为它允许动态属性。
编辑:你是对的,由于某种原因,扩展和mime检查失败,只有HTML5方式有效: the accept
attribute
然后这将有效(在大多数浏览器中running demo),建议选择一个图像:
<s:file name="file" label="Upload Image" accept="image/*" />
这是一个非阻止过滤器,但是:*.*
仍然可以从对话框选择框中选择;
因为这只是一个客户端过滤,你必须也检查contentType,最后检查服务器端的Struts2 check out the curent compatibility here。
例如:
<interceptor-ref name="fileUpload">
<param name="allowedTypes">
image/png,image/gif,image/jpeg
</param>
<param name="allowedExtensions">
.png,.gif,.jpeg,.jpg
</param>
</interceptor-ref>