2014-05-15 30 views
1

我可以使用下面的简单代码上传文件,但我需要强制用户上传特定类型的文件。目前用户可以上传任何类型的文件,并且我可以在后端查看扩展程序,但是我需要强制他们仅上载图像。如何以允许浏览的方式进行操作文件(*图像)不是所有文件(*。*)如何将文件浏览页面设置为特定类型的文件?

<s:form method="POST" enctype="multipart/form-data" action="upload"> 
    <s:file name="file" label="Upload Image"/> 
    ... 
+0

_not所有文件(*。*)_你的意思是一个抽象的浏览器设置的条件不是这个过滤器添加到对话? –

+0

@RomanC我的意思是只需要它接受图像而不是任何其他类型的文件。 – Jack

+0

你想如何接受他们? –

回答

1

您可以使用HTML <input type="file" />the accept attribute

accept 

如果type属性的值是文件,该属性指示类型的服务器接受的文件;否则就是 被忽略。该值必须是一个以逗号分隔的独特内容 类型说明符列表:

  • 文件扩展开始与STOP字符(U + 002E)。 (例如: “.JPG; png格式; .DOC”)
  • 有效MIME类型没有扩展
  • 音频/ *表示声音文件(HTML5
  • 视频/ *表示视频文件(HTML5
  • 图像/ *代表图像文件(HTML5

它将与<s:file />也因为工作它允许动态属性。


编辑:你是对的,因为某些原因,延伸和哑剧检查失败,只有HTML5的工作方式:running demo

那么这将工作(在大多数浏览器,check out the curent compatibility here),提示图像被选择:

<s:file name="file" label="Upload Image" accept="image/*" /> 

它是一个非块滤波器,但是:*.*仍然是选择素表格从对话框中选择;

由于这只是一个客户端过滤,所以你的必须还要检查contentType,最后是扩展名,服务器端用Struts2 File Upload Interceptor

例如:

<interceptor-ref name="fileUpload"> 
    <param name="allowedTypes"> 
     image/png,image/gif,image/jpeg 
    </param> 
    <param name="allowedExtensions"> 
     .png,.gif,.jpeg,.jpg 
    </param> 
</interceptor-ref> 
+0

如果我使用拦截器的allowedExtensions和allowedTypes参数,该怎么办?我还添加了该属性,但它仍然对所有类型的文件都很生气。目前,我正在使用FilenameUtils检查后端文件的扩展名,此时此刻 Jack

+0

。getExtension(FNAME);你知道更好的解决方案吗? – Jack

+0

你是对的,文档的前两个例子不起作用。请检查更新的答案。其余的,当然使用文件上传拦截器,与Struts2你不需要使用FilenameUtils或其他什么,它已经内置 –

相关问题