【JS】input上傳文件相關(guān)尺寸限制态兴,類型限制等

文件的類型泥栖,常見的有:

  • 圖片:PNG,JPG等
  • 文件:EXCEL,WORD,PDF
  • 多媒體: 音頻峭拘,視頻

Input上傳文件

<input id="fileItem" type="file">
var inputElement = document.getElementById('fileItem');
var file = inputElement .files[0];
//通常在change事件中處理對應(yīng)的文件
inputElement.addEventListener("change", handleFiles, false);
function handleFiles() {
  const fileList = this.files; /* now you can work with the file list */
}

所有type屬性(attribute)為file的 <input> 元素都有一個(gè)files屬性(property),用來存儲(chǔ)用戶所選擇的文件
FileList

這個(gè)files屬性,是FileList數(shù)據(jù)類型咬扇,而FileList數(shù)據(jù)類型的每個(gè)元素就是File類型
File

  • accept屬性-限制上傳文件類型
    如果該元素的 type 屬性的值是file,則該屬性表明了服務(wù)器端可接受的文件類型甲葬;否則它將被忽略。該屬性的值必須為一個(gè)逗號(hào)分割的列表,包含了多個(gè)唯一的內(nèi)容類型聲明懈贺。
    MDN-Input
<p>顯示 .xls, .xlsx, .csv 文件...</p>
<input type="file" accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel" ID="fileSelect" runat="server" />  

<p>只顯示  Excel (.xlsx) 文件...</p>
<input type="file" accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ID="fileSelect" runat="server" />  

<p>只顯示 Excel (.xls) 文件...</p>
<input type="file" accept="application/vnd.ms-excel" ID="fileSelect" runat="server" />  

<p>只顯示圖片.</p>
<input type="file" accept="image/*" ID="fileSelect" runat="server" />  

<p>只顯示文本文件...</p>
<input type="file" accept="text/plain" ID="fileSelect" runat="server" />  

<p>只顯示html文件.</p>
<input type="file" accept="text/html" ID="fileSelect" runat="server" />  

<p>只顯示 video 文件..</p>
<input type="file" accept="video/*" ID="fileSelect" runat="server" />  

<p>只顯示 audio 文件...</p>
<input type="file" accept="audio/*" ID="fileSelect" runat="server" />  

<p>只顯示 .WAV 文件...</p>
<input type="file" accept=".wav" ID="fileSelect" runat="server" />  

<p>只顯示 .PDF 文件...</p>
<input type="file" accept=".pdf" ID="fileSelect" runat="server" />  
  • Input文件大小限制
function verificationFileSize(file) {
    var fileSize = 0;
    var fileMaxSize = 1024;//1M
    var filePath = file.value;
    if(filePath){
        fileSize =file.files[0].size;
        var size = fileSize / 1024;
        if (size > fileMaxSize) {
            alert("文件大小不能大于1M经窖!");
            file.value = "";
            return false;
        }else if (size <= 0) {
            alert("文件大小不能為0M!");
            file.value = "";
            return false;
        }
    }else{
        return false;
    }
}
  • Input圖片尺寸限制
//圖片尺寸驗(yàn)證
function verificationPicFile(file) {
  var filePath = file.value;
  if(filePath){
      //讀取圖片數(shù)據(jù)
        var filePic = file.files[0];
        var reader = new FileReader();
        reader.onload = function (e) {
            var data = e.target.result;
            //加載圖片獲取圖片真實(shí)寬度和高度
            var image = new Image();
            image.src= data;
            image.onload=function(){
                var width = image.width;
                var height = image.height;
                if (width == 720 | height == 1280){
                    alert("文件尺寸符合梭灿!");
                }else {
                    alert("文件尺寸應(yīng)為:720*1280画侣!");
                    file.value = "";
                    return false;
                }
            };
        };
        reader.readAsDataURL(filePic);
    }else{
        return false;
    }
}

js實(shí)現(xiàn)上傳圖片類型+大小+尺寸驗(yàn)證

Input上傳文件的注意事項(xiàng)
  • 問題描述:Input上傳文件時(shí),同樣的文件上傳第二次不會(huì)觸發(fā)onchange回調(diào)
  • 解決方案:onchange監(jiān)聽的為input的value值堡妒,只有再內(nèi)容發(fā)生改變的時(shí)候去觸發(fā)棉钧,而value在上傳文件的時(shí)候保存的是文件的內(nèi)容,你只需要在上傳成功的回調(diào)里面涕蚤,將當(dāng)前input的value值置空即可宪卿。event.target.value=”;
    input 上傳第二次不能選擇同一文件
隱藏input默認(rèn)樣式
  • 用其他元素調(diào)用input的click事件
<input type="file" id="fileElem" multiple accept="image/*" style="display:none" onchange="handleFiles(this.files)">
<button id="fileSelect">Select some files</button>

const fileSelect = document.getElementById("fileSelect"),
  fileElem = document.getElementById("fileElem");

fileSelect.addEventListener("click", function (e) {
  if (fileElem) {
    fileElem.click();
  }
}, false);
  • 使用 label 元素來觸發(fā)一個(gè)隱藏的 file input 元素

允許在不使用 JavaScript(click() 方法)來打開文件選擇器,可以使用 <label> 元素万栅。注意在這種情況下佑钾,input 元素不能使用 display: none(或 visibility: hidden)隱藏,否則 label 將無法通過鍵盤訪問烦粒。使用 visually-hidden technique 作為替代休溶。

How-to: Hide content

<input type="file" id="fileElem" multiple accept="image/*" class="visually-hidden">
<label for="fileElem">Select some files</label>
.visually-hidden {
  position: absolute !important;
  height: 1px;
  width: 1px;
  overflow: hidden;
  clip: rect(1px, 1px, 1px, 1px);
}

/* Separate rule for compatibility, :focus-within is required on modern Firefox and Chrome */
input.visually-hidden:focus + label {
  outline: thin dotted;
}
input.visually-hidden:focus-within + label {
  outline: thin dotted;
}

通過 click() 方法使用隱藏的 file input 元素

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末代赁,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子兽掰,更是在濱河造成了極大的恐慌芭碍,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件孽尽,死亡現(xiàn)場離奇詭異窖壕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)杉女,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門瞻讽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人熏挎,你說我怎么就攤上這事速勇。” “怎么了坎拐?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵烦磁,是天一觀的道長。 經(jīng)常有香客問我哼勇,道長都伪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任猴蹂,我火速辦了婚禮院溺,結(jié)果婚禮上楣嘁,老公的妹妹穿的比我還像新娘磅轻。我一直安慰自己,他們只是感情好逐虚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布聋溜。 她就那樣靜靜地躺著,像睡著了一般叭爱。 火紅的嫁衣襯著肌膚如雪撮躁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天买雾,我揣著相機(jī)與錄音把曼,去河邊找鬼。 笑死漓穿,一個(gè)胖子當(dāng)著我的面吹牛嗤军,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晃危,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼叙赚,長吁一口氣:“原來是場噩夢啊……” “哼老客!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起震叮,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤胧砰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后苇瓣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尉间,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年钓简,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了乌妒。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡外邓,死狀恐怖撤蚊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情损话,我是刑警寧澤侦啸,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站丧枪,受9級(jí)特大地震影響光涂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拧烦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一忘闻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恋博,春花似錦齐佳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疫衩,卻和暖如春硅蹦,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背闷煤。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工童芹, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鲤拿。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓假褪,卻偏偏與公主長得像,于是被迫代替她去往敵國和親皆愉。 傳聞我的和親對象是個(gè)殘疾皇子嗜价,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348