前言
   
在实际工作中前端相互传输文件时,前端会采用二进制,文本格式或者base64传输,要了解前端文件格式有哪些和这些格式之间怎么转换,先熟悉以下概念:
- 
files:文件对象的API,有很多对文件的操作方法,可在w3c官方文档查看 
- 
Blob:不可变的二进制对象API,包含很多操作方法,和file基本有一样的操作方法 
- 
FormData:用于和后端传输文件的对象,是一种采用键值对传递数据的API 
- 
FileReader:多用于把文件读取为某种形式的API,如base64,txt文本 
下面这张图展示文件在前端的各种格式的转换
    一.格式之间的关系
   
    1.File格式
   
File的格式有很多种,如图片,文本格式。获取File的文件有多种方式,一种是实例化一个files对象,另外就是转化其他对象,或者可以将input输入框的type设为file获取
  <input id="file" type="file" name="file" >
<script>
 const file= document.querySelector("#file")
 const myFiles= new File(['hello file'],'a.txt')//数组括号里面的第一个文件是写入的内容,第二个参数是文件名
 file.addEventListener("change", function (e){//通过input的chang事件来获取input框上传的文件
   const formFile=e.target.files[0]
})
</script>
    2.Blob二进制格式
   
得到blob二进制可以通过实例化或者转化其他类型得到
let blob = new Blob(['这里是要转换的字符串或者图片等'], { type: "text/plain;charset=utf-8" });
//第一个参数为写入的内容,第二个为指定转化的类型
    3.FileReader转化文件
   
FileReader可以将不同的文件格式转化,也可以转化Blob格式为其他类型
const myFiles= new File(['hello file'],'a.txt')
const blob=new Blob(myFiles)//将文件转为Blob二进制格式
const newFile=new File(blob)
//将Blob或者File转为其他文件类型时可以采用FileReader来指定转化的文件类型
let fr=new FileReader();
fr.readAsText(blob)//表示将该Blob或者File格式文件转为文本格式
fr.readAsDataURL(blob)//参数可以为Blob或者File格式,表示将文件读为base64格式
//读取转化的文件
fr.onload=function(){//转化文件为异步操作,所以需要监听load事件,当然转化操作只能保留一个
   console.log('frBase64',fr.result)
}
    二.input框实现上传文件
   
    1.input框上传文件的基本属性
   
  <input id="file" type="file" name="file" multiple>
//type="file"表示可以上传文件
//multiple表示可以一次上传多个文件,single表示只能上传一个文件
//accept="image/gif,image/png"表示只能上传图片的gif和png格式
//accept=".png,.txt"表示上传.png和.txt格式
//accept="image/*"表示上传所有的图片格式
    2.获取input框上传的文件内容
   
 const file= document.querySelector("#file")//获取input框的dom
const fileList=[]//上传文件的列表
file.addEventListener("change", function (e){
    e.target.files[0]//如果是单文件传输直接获取第一个即可
    fileList.push(new Blob( e.target.files[0])//表示转为二进制传输
    //多文件传输
    e.target.files.forEach(item=>{
     cosnt fr= new FileReader()
     fr.readAsDataURL(item)//将文件转为base64传输
     fr.onload=function(){//转化文件为异步操作,所以需要监听load事件
      fileList.push(fr.result)
     }
})
    三.FormData格式传输文件
   
    1.form表单指定FormData格式传输
   
设置formData格式传输可以在form表单设置enctype=”multipart/form-data”来规定数据传输的格式,在传输时就可可以根据表单组件数据转为为formData的传输
<form action="http...." enctype="multipart/form-data"></form>2.自动设置FormData
 const formDataFile=new FormData()//创建FormData对象
 formDataFile.append("file",formFile)//formFile可以是Blob格式或者file格式
 formDataFile.append('user','zhangsan')//添加传输的信息 
版权声明:本文为qq_49793461原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

