HTML5 input file控件使用accept過濾限制的文件類型以及在谷歌下打開很慢的問題


  在文件上傳控件(input type='file')中,可以通過accept屬性實現對文件類型的過濾。

一、相關代碼:

    下面給出對應的文件上傳控件代碼:

<input type="file" id="myFile" accept="image/jpeg,image/gif,application/msword"/><br/>

  上面的代碼表示限制文件上傳類型為.jpg/.gif/.doc。

二、限制規則:

    在文件上傳控件的accept屬性中,接受以下兩種格式的限制符:

  • 文件類型,但不限制具體擴展名,如:image/*,就只要是圖片就行。
  • 文件類型+具體的文件擴展類型,如:image/jpeg,使用的是MIME_TYPE類型
  • 多個MIME_TYPE類型之間用逗號分隔。

三、accept屬性具體接受的類型:

  accept這個屬性,只在FF,ie10和chrome中有效。

  以下是常用的類型:

四、兼容性問題:

  我們在代碼中使用了HTML5的input[file]標簽去上傳圖片

<input type="file" name="file" class="element" accept="image/*">

  同時,在上面代碼中,使用了 accept=”image/*” 去過濾所有非圖片的文件。但是,這段代碼在Chrome和Safari等Webkit瀏覽器下卻出現了響應滯慢的問題,可能要等 6~10s 才能彈出文件選擇對話框。簡直不能忍呀。在IE和Firefox中使用accept="image/*"屬性則沒有發現響應延遲的問題。

  對屬性進行逐一排查后,發現是accept=”image/*”的問題。將accept=”image/*”改為指定的圖片格式就不會出現上述的概率性問題,所以我將上傳圖片的過濾格式指定為了常用的幾種格式

<input type="file" name="file" class="element" accept="image/jpg,image/jpeg,image/png">

  當然,如果希望過濾所有的非圖片格式,那么這個問題還是會存在。原因初步猜想是當設置accept=”image/*”時,瀏覽器會在彈出框中處理所有的非圖片元素,包含所有的圖片格式,如果文件較多會增加處理時間,而這個時候可能在這個版本的chrome中有bug(也許是底層沒實現好),導致概率性時間增長。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM