2011-09-13 73 views
6

今天我遇到了一個有趣的事情,就是FF File API和按其類型分開的文件。好的,這裏是一個小片段,因爲JS和type.match作爲文件MIME類型 - 需要建議

if (!input.files[0].type.match('image.*')) { 
      window.alert("Select image please"); 
      return; 
     } 

它控制圖像只讀。但是,關於doc文件和pdf例如呢?我找不到有用的例子,所以我希望你能分享一些片段。我感興趣的是檢測不同的文件類型,但我怎樣才能控制JS和它的type.match綁定不同的文件類型?

Here是基本代碼

任何有用的註釋是讚賞:)

+0

你確定這個工程? type屬性應該是'file'否?你引用的類型是'accept'屬性http://reference.sitepoint。com/html/input/accept可以接受任何MIME類型的值。 –

+0

是的,它的工作原理並不會獲取除圖像以外的文件。但我想看看如何爲文檔或PDF文件做同樣的事情? – user592704

+0

恩...謝謝你的鏈接。 (「text/html」,「image/x-rgb」或「application/java」)可能就是這一點。我不太確定它是否爲接受文件屬性,因爲JS使用image。*是因爲它的if運算符:(所以我需要你的建議我應該看看什麼? – user592704

回答

16

所以基本想法是,這代碼使用文件對象,對他們的詳細信息,請參閱:

作爲每w3指定,在文件對象的type屬性是一個MIME類型。這在RFC 2046中定義。但是規範本身並不是最有趣的部分,更有趣的是現有的MIME類型列表here或最常用的一個here

在這段代碼中,他們使用的type屬性,並在其上執行一個正則表達式(見matchRegExp獲取更多信息)。他們的正則表達式表示,如果該類型包含image,則可以。

爲了讓自己的選擇器,你必須結合上述。 (一些實施例的使用===代替匹配,因爲mime類型是整個型) 例如下面的檢查是可能的:僅

  • 文檔(沒有PDF,ODT有這種類型以及例如):input.files[0].type==='application/pdf'
  • 音頻:input.files[0].type.match('audio.*')
  • 視頻:input.files[0].type.match('video.*')

等。

之後,如果您只想匹配某個擴展名(例如,在不同類型的文檔之間進行檢查,您可以看看它是否爲.pdf,.odt),則可以在文件的name屬性上使用選擇器。 ..)使用例如input.files[0].name.match('\.pdf')。 但是我不建議這樣做,因爲用戶可以輕鬆玩這個遊戲(刪除或更改它們)。

+0

它的工作原理我嘗試了PDF :)謝謝 – user592704

+0

太棒了 - 我將'視頻'添加到了我現有的'圖像 – itsricky

+0

'圖像'之一,它的工作魅力! if(!file.type.match(/^image \ //)&&!file.type.match(/^video \ //)){}; – itsricky

0

這可能幫助:

file.mimetype.match('text.*|image.*|application.*') 

此檢查所有可接受MIME類型