2014-05-15 58 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或其他什麼,它已經內置 –

相關問題