本文實例為大家分享了JS實現前端本地文件上傳的具體代碼,供大家參考,具體內容如下
通過input type = file來選擇本地文件
<div> <form> <input type="file" id="file-input" name="fileContent"> </form></div>
var fileInput = document.querySelector('#file-input');fileInput.onchange = function(){ console.log('文件名:',this.value) var formData = new FormData(this.form); console.log(formData)}//打印出的結果是文件名: C:/fakepath/css.jpg然后在是一個空對象
使用formData無法得到文件的內容,那么就使用FileReader來讀取整個文件的內容
var fileInput = document.querySelector('#file-input');fileInput.onchange = function(){ var filereader = new FileReader(); var fileType = this.files[0].type; filereader.onload = function(){ if(/^image/[jpeg|png|gif]/.test(fileType)){ console.log(this.result); } } console.log(this.files[0]); filereader.readAsDataURL(this.files[0]);}console.dir(fileInput);
從打印結果來看,能清楚的知道上傳的文件信息是在input type = ‘file'dom對象中的files[0]中。
filereader.readAsDataURL是將flies[0]里的信息轉換成base64方式讀取。
filereader的讀取為以下格式:
var files = document.getElementById('pic').files; //files是文件選擇框選擇的文件對象數組if(files.length == 0) return; var form = new FormData(), url = 'http://.......', //服務器上傳地址 file = files[0];form.append('file', file);var xhr = new XMLHttpRequest();xhr.open("post", url, true);//上傳進度事件xhr.upload.addEventListener("progress", function(result) { if (result.lengthComputable) { //上傳進度 var percent = (result.loaded / result.total * 100).toFixed(2); }}, false);xhr.addEventListener("readystatechange", function() { var result = xhr; if (result.status != 200) { //error console.log('上傳失敗', result.status, result.statusText, result.response); } else if (result.readyState == 4) { //finished console.log('上傳成功', result); }});xhr.send(form); //開始上傳
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。
新聞熱點
疑難解答