HTML5 文件上传

这篇随笔主要引用https://juejin.im/post/59598ecf5188250d8d141fff,只用于自己学习,不对外宣传。

FileList 对象和 file 对象

input[type="file"]标签有一个multipe属性,允许用户选择多个文件,FileList对象就是表示用户选择的文件列表。这个列表中的每一个文件就是一个file对象。

file对象属性:

  • name:文件名,不包含路径
  • type:文件类型。图片类型的文件都会以image/开头,可以由此来限制只允许上传图片
  • size:文件大小
  • lastModified:文件最后修改时间
<input type="file"  multipe>
<script>
    var elem = document.getElementById('files');
    elem.onchange = function (event){
        var files = event.target.files;
        for(var i = 0;i<files.length;i++){
            if(files[i].type.indexof('image/')!==-1&&files[i].size<204800){
            console.log(files[i].name);
        }    
    }
}

input 中有个 accept 属性,可以用来规定能够通过文件上传进行提交的文件类型。

<input type="file" accept="image/gif,image/jpeg,image/jpg,image/png">

FileReader 对象

FileReader对象主要用来把文件读入内存,并且读取文件中的数据。通过构造函数创建一个FileReader对象

var reader = new FileReader();

该对象有以下方法:

  • abort:中断读取操作
  • readAsArrayBuffer:读取文件内容到ArrayBuffer对象中
  • readAsBinaryString:将文件读取为二进制数据
  • readAsDataURL:将文件读取为data:URL格式的字符串
  • readAsText:将文件读取为文本
<input type="file" >
<img src="blank.gif" >
<script>    
    var elem = document.getElementById('files'),
        img = document.getElementById('preview');
       elem.onchange = function(){
         var files = elem.files,
           reader = new FileReader();
         if(files && files[0]){
          reader.onload = function(ev){
           img.src = ev.target.result;
           }
        reader.readAsDataURL(files[0])
      }
    }
</script>