<input type='file' name='userFile'>
現在,當我將單擊瀏覽按鈕,瀏覽器對話框將顯示所有文件...如果我要過濾的文件類型是什麼讓說HTML <INPUT TYPE =「文件」>應用過濾器
- 只有圖像png格式 & 的.jpg & .gif文件
- 僅辦公文件一樣.DOC &個.DOCX & .PPS
怎麼辦呢?
<input type='file' name='userFile'>
現在,當我將單擊瀏覽按鈕,瀏覽器對話框將顯示所有文件...如果我要過濾的文件類型是什麼讓說HTML <INPUT TYPE =「文件」>應用過濾器
怎麼辦呢?
文件輸入控件上有一個「接受」屬性,您可以在其中指定所需文件的類型。 儘管我看到許多瀏覽器都喜歡忽略它 - 可以指定的文件類型是MIME類型,所以嚴格正確的瀏覽器必須查看每個文件,而不管擴展名是否是圖像(如果是的話,它是什麼類型)。
更新:看來至少一些在Windows上每一個主要的瀏覽器版本,現在至少提供了accept
屬性一定支撐。 (即使IE支持它,從版本10開始)。但是,依靠它還有點早,因爲IE 8和9仍然不支持它。一般來說,支持有點多。
您應該考慮添加屬性,所以支持它的瀏覽器可以幫助用戶更容易地找到正確的文件。但是我仍然建議你在文件被選擇後檢查文件名,並且如果上傳了錯誤擴展名的文件,則顯示錯誤信息。
當然,肯定有服務器仔細檢查文件是否是正確的類型。文件擴展名只是一種命名約定,可以很容易地被破壞。即使我們可以相信瀏覽器(我們不能),並且即使它確實試圖按照您的要求過濾東西(它可能不會),但它實際驗證該文件是真正的Word文檔的機會接近於零。
您應該使用one of the plugins使用嵌入式閃存,因爲你不能用普通做的JavaScript
謝謝,但不是謝謝...我寧願檢查文件類型後,它已被選中...它會保存我很多工作 – Moon 2010-08-19 11:17:14
+1,因爲這是唯一可行的解決方案(雖然它會更好發佈一些實際的鏈接,而不是可以更改的Google搜索)。 @Moon無論如何您需要檢查文件類型(即在上傳之後)......選擇之後您可以在本地執行的唯一操作是檢查文件擴展名,它不是實際文件類型的100%可靠指示符。 – 2010-08-19 11:33:09
@Pekka웃:從HTML 5開始,數字瀏覽器實際上可以[讀取選定文件的字節](https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications)。在IE 8中仍然不起作用,但是由於安全性要求您仔細檢查,任何客戶端驗證實際上只是一種幫助防止用戶浪費時間的方法。如果他們仍然在使用IE8,儘可能慢,他們顯然不介意浪費時間... :) – cHao 2013-08-22 14:27:05
你無法控制哪些文件可以選擇,但你可以選擇該文件後,用JavaScript讀取的文件名。如果文件類型錯誤,則可以顯示警告和/或禁用提交按鈕。但是,請記住,您無法依賴擴展名來告訴您文件是否屬於正確類型。只能將其視爲一種方式,以幫助用戶在發現您不支持該文件類型之前浪費時間上傳大文件。
下面是一些示例代碼來做到這一點。它使用jQuery,但你也可以在普通的JavaScript中做同樣的事情。
$(function() {
$('#inputId').change(function() {
var filename = $(this).val();
if (! /\.txt$/.test(filename)) {
alert('Please select a text file');
}
});
});
如何將這個用於多種文件類型? – Jdoonan 2015-07-03 03:33:26
我想你正在尋找accept參數。試試這個工作
<input type="file" accept="image/*" />
應該使用MIME_type
: 例如
<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" />
這將只接受*.xlsx
文件類型...
對於MIME類型列表中,點擊下方的鏈接:
http://www.bitsandpix.com/entry/microsoft-office-2007-2010-docx-xlsx-pptx-mime-type-to-avoid-the-zip-issue/
我做了一個簡單的方法f或者大多數情況下文件過濾的客戶端驗證。其實很簡單。現在,在你去嘗試實現這個之前,要明白服務器必須檢查這個文件,因爲在有人改變.js甚至是HTML時,javascript和HTML過濾並不是一個確定的事情。 我不包括所有簡單的事實,我喜歡看到其他實現使用創意思維的概念的實際腳本的,但這些都是我所採取的似乎工作,直到我找到一個更好的答案的步驟:
創建一個查找輸入並處理它的js對象。
調用一個函數,如OnClientUploadComplete爲AjaxControlToolKit的AsyncFileUpload控制。
在這個函數中,聲明一個布爾變量:bIsAccepted(設置爲false)和字符串sFileName(獲得從ARGS在文件名後)。
在if..else語句,
if(sFilename.indexOf(".(acceptedExtension1)") ||
sFileName.indexOf(".(AcceptedExtension2)"))
{
bIsAccepted = true;
}
else
{
bIsAccepted = false;
}
然後
if(bIsAccepted)
{
//Process Data
}
在服務器上,設置接受的文件擴展名列表和循環,並通過類似的處理會使進程凝聚力並保持一致,有效地允許用戶界面和代碼隱藏在幾乎所有情況下過濾文件類型。
鑑於這可以通過改變有不同的文件擴展名作爲名稱的一部分的名字被繞過,MIME類型也應該提交到服務器進行進一步處理前檢查。
[http://www.webmaster-toolkit.com/mime-types.shtml][1]
希望這有助於!
使用MVC我們可以限制上傳的zip文件只
.HtmlAttributes(new { accept = ".zip*" })
你可以使用JavaScript。考慮到使用JavaScript做這件事的最大問題是重置輸入文件。那麼,這個規定只有JPG(對於其它格式,你將不得不改變mime type和magic number):
<form id="form-id">
<input type="file" id="input-id" accept="image/jpeg"/>
</form>
<script type="text/javascript">
$(function(){
$("#input-id").on('change', function(event) {
var file = event.target.files[0];
if(file.size>=2*1024*1024) {
alert("JPG images of maximum 2MB");
$("#form-id").get(0).reset(); //the tricky part is to "empty" the input file here I reset the form.
return;
}
if(!file.type.match('image/jp.*')) {
alert("only JPG images");
$("#form-id").get(0).reset(); //the tricky part is to "empty" the input file here I reset the form.
return;
}
var fileReader = new FileReader();
fileReader.onload = function(e) {
var int32View = new Uint8Array(e.target.result);
//verify the magic number
// for JPG is 0xFF 0xD8 0xFF 0xE0 (see https://en.wikipedia.org/wiki/List_of_file_signatures)
if(int32View.length>4 && int32View[0]==0xFF && int32View[1]==0xD8 && int32View[2]==0xFF && int32View[3]==0xE0) {
alert("ok!");
} else {
alert("only valid JPG images");
$("#form-id").get(0).reset(); //the tricky part is to "empty" the input file here I reset the form.
return;
}
};
fileReader.readAsArrayBuffer(file);
});
});
</script>
採取在考慮到這是在Firefox和Chrome的最新版本進行測試,並在IEXPLORE 10。
「任何主流瀏覽器都無法正確支持accept屬性。」 (引自http://www.w3schools.com/TAGS/att_input_accept.asp) – Nick 2010-08-19 11:58:45
尼克是正確的..我試過 – Moon 2010-08-19 12:01:42
現在引用的頁面顯示「除了Internet Explorer和Safari之外,所有主流瀏覽器都支持accept屬性「。 – Mopper 2012-09-19 14:13:54