后台文件上传对于前端来说应该是既陌生又熟悉的。每次上传文件,不管是文件上传图片还是上传其他类型的文件,如果文件比较小,可以将文件转换成文件流传输到服务器。为了更好的完善上传文件的功能,我做了一些研究,整理了一下。了解文件对象。目前前端不支持对本地文件的操作,所以用户选择的File对象只有在用户主动触发时才能获取到。用户可以通过三种方式操作触发器:通过输入选择本地文件type="file"通过在编辑框中拖拽复制粘贴来拖拽文件通过输入获取当然目前最常用的是第一种方式使用前端,通过input类型,可以快速获取到用户选中的File对象。HTML代码如下:
然后通过FormData获取整个表单的内容(文末会讲解)文章的)对象:document.getElementById(“fileInput”).onchange=function(){letformData=newFormData(this.form);formData.append("文件名",this.value);控制台日志(this.value);console.log(formData);}代码分别打印input.value和formData,input.value输出的是一个虚拟路径,无法通过或路径访问用户选择的文件。但是,formData打印出来的是一个空对象。我们看到的是一个空对象,并不代表整个对象都是空的。只是浏览器打印出对象,无法对文件进行操作,只能通过append添加一些字段。//FormData{__proto__:FormData}说了这么多,还是没有提到File对象。实际上,在用户选择文件后,File对象的实例已经创建并存储在相应输入DOM中的文件中。使用inputtype="file"时,可以在浏览器上看到一个浏览器默认的按钮,看起来不是特别友好。作者是这样处理这个问题的:oInput.setAttribute("类型","文件");oInput.click();oInput.onchange=function(){console.log(this.files[0])}}//文件输出结果{lastModified:1600000000000,lastModifiedDate:ThuSep30202115:11:10GMT+0800(ChinaStandardTime),name:"logo.jpg",size:"20000",type:"image/jpg",webkitRelativePath:"",__proto__:File}当然File只是存放在输入DOM中,可以获取通过任何方法。我们看到的File对象其实是File的一个实例,里面包含了修改时间、文件名、文件大小等信息。因为我们获取到的File对象,没有办法直接在页面上显示出来,而是需要预览图片之类的文件,所以需要使用FileReader(文末介绍)对象进一步处理文件对象。通过实例化FileReader调用它的readAsDataURL并将File对象传给它,监听它的onload事件,加载后的读取结果在它的result属性中。它是base64格式,可以直接赋值给一个img的src。document.getElementById("btn").onclick=function(){constoInput=document.createElement("input");oInput.setAttribute("类型","文件");oInput.click();oInput.onchange=function(){letfileReader=newFileReader();让{类型:文件类型}=this.files[0];fileReader.onload=function(){if(/^image/.test(fileType)){constimg=document.createElement("img");控制台日志(这个。结果);img.setAttribute("src",this.result);文档.body.appendChild(img);}}fileReader.readAsDataURL(this.files[0]);}}使用FileReader不仅可以读成base64,还可以读成如下格式://读成base64,结果是base64,任何文件都可以转成base64fileReader.readAsDataURL(this.files[0]);//作为二进制字符串读取,结果为utf-8形式的二进制内容,已被丢弃一个整数数组fileReader.readAsArrayBuffer(this.files[0]);其他的主要可以读作ArrayBuffer,这是一种原始二进制格式的结果。对前端开发者也是透明的,不能直接读取里面的内容,但是可以通过ArrayBuffer.length获取长度,也可以转换成整型数组,知道文件的原始二进制内容。Drop如何读取文件,通过Drop读取文件内容?如果说是传统的使用input,那么通过Drop获取文件只能说是风靡一时。HTML: