基於javascript html5實現多檔案上傳_javascript技巧

來源:互聯網
上載者:User

本文執行個體為大家分享了javascript html5實現多檔案上傳的實現方法,具體內容如下

HTML結構:

<div class="container">  <label>請選擇一個影像檔:</label>  <input type="file" id="file_input" multiple/></div>

順便說下這個上傳的主要邏輯:

  • 用input標籤並選擇type=file,記得帶上multiple,不然就只能單選圖片了
  • 綁定好input的change時間,
  • 重點就是如何處理這個change事件了,使用H5新的FileReader介面讀取檔案並打成base64編碼,之後的事就是與後端同學互動著玩啦

JS代碼:

window.onload = function(){    var input = document.getElementById("file_input");    var result,div;     if(typeof FileReader==='undefined'){      result.innerHTML = "抱歉,你的瀏覽器不支援 FileReader";      input.setAttribute('disabled','disabled');    }else{      input.addEventListener('change',readFile,false);    }<br>     //handler    function readFile(){      for(var i=0;i<this.files.length;i++){        if (!input['value'].match(/.jpg|.gif|.png|.bmp/i)){  //判斷上傳檔案格式          return alert("上傳的圖片格式不正確,請重新選擇")<br>          }        var reader = new FileReader();        reader.readAsDataURL(this.files[i]);        reader.onload = function(e){          result = '<div id="result"><img src="'+this.result+'" alt=""/></div>';          div = document.createElement('div');          div.innerHTML = result;          document.getElementById('body').appendChild(div);   //插入dom樹           <br>          }      }    }  }

上傳多張圖片難道就這樣實現了嗎?

然而並沒有,這樣只是將圖片轉換成base64編碼後再最上層顯示,一重新整理什麼都沒有

插入圖片後,開啟開發人員工具看html結構是這樣的

 

現實的做法是,我們在處理函數裡將檔案隊列裡的檔案發送到後端,後端同學呢返迴文件對應的MD5加密過檔案和路徑給前端,前端就拿著這個路徑渲染到頁面上。

之後再把MD5檔案傳回給後端,因為上傳完後前端一般有刪除圖片的操作,回傳目的就是告訴後端確認那些圖片是我們想要的,後端存入資料庫裡。

說下用jquery如何互動吧

function readFile(){      var fd = new FormData();      for(var i=0;i<this.files.length;i++){        var reader = new FileReader();        reader.readAsDataURL(this.files[i]);        fd.append(i,this.files[i]);<br>          }        $.ajax({          url : '',          type : 'post',          data : fd,          success : function(data){            console.log(data)          }         })}  

FormData也是H5的新介面,用來類比表單控制項的提交,最大的好處呢就是可以提交二進位檔案

然後success的回調裡面我們拿回了想要的資料後呢,就可以將圖片插進去頁面啦,類似之前的做法~

上個效果圖:

以上就是本文的全部內容,希望對大家的學習有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.