原生JS實現(xiàn)前端本地文件上傳
更新時間:2018年09月08日 14:55:28 作者:想要飛的pig
這篇文章主要為大家詳細介紹了原生JS實現(xiàn)前端本地文件上傳,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了JS實現(xiàn)前端本地文件上傳的具體代碼,供大家參考,具體內容如下
通過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的讀取為以下格式:
- readAsDataURL(this.files[0]) base64位讀取
- readAsBinaryString(this.files[0]) 以二進制方式讀取讀取結果是UTF-8形式(被廢棄)
- readAsArrayBuffer(this.flies[0]) 以二進制原始方法讀取,讀取結果可轉換成整數(shù)的數(shù)組
var files = document.getElementById('pic').files;
//files是文件選擇框選擇的文件對象數(shù)組
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); //開始上傳
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
教你如何使用firebug調試功能了解javascript閉包和this
這篇文章主要介紹了教你如何使用firebug調試功能了解javascript閉包和this,javascript的調試也是一個比較大的難點,很多基礎的東西都需要自己去摸索,這里將自己的經驗分享給大家,希望對大家能夠有所幫助2015-03-03
ASP中進行HTML數(shù)據(jù)及JS數(shù)據(jù)編碼函數(shù)
在有些時候我們無法控制亂碼的出現(xiàn), 比如發(fā)送郵件的時候有些郵件顯示亂碼, 比如Ajax返回數(shù)據(jù)總是亂碼. 怎么辦?2009-11-11

