File、FileReader、FormData

File、FileReader、FormData

近期因业务需要,重新学习了一下下html的上传文件,把一些在文件方面常见的概念理理清楚,方便日后回顾。

File

File,顾名思义就是文件,千万要和FileReader进行区分。File继承自Blob,是二进制的大对象,File有一个很重要的方法就是File.slice(),可以实现对大文件的分段截取。在html中,File可以来自于的FileList,也可以来自于拖拽事件。

FileReader

FileReader是用来把File读进javaScript的api,读取文件内容以后,可以有后续的操作,比如利用readAsDataURL实现预览图片等等。

FormData

FormData的出现,是为了解决在Ajax中频繁用到的序列化操作而制定,采用formData.append("webmasterfile", blob);这样的方式来自动对数据进行序列化,从而利用XMLHttpRequest对序列化后的数据进行发送。

上传文件

利用以上几点,实现上传文件的时候,可以先使用FileReader来读取文件内容,然后再使用FormData进行上传。当然,这样的操作需要把文件内容读取进js,其实完全不必要,formData.append("webmasterfile", file)这样的方式可以直接在不读取文件内容的情况下,把文件当成普通的表单数据来上传。

图片预览

图片预览的本质就是在读取文件后,将图片的url赋值给img.src,实现的方式和文件上传一样,同样可以有两种。1.读取图片的内容,然后使用FileReaderreadAsDataURL方法,把读取到的dataURL赋值给img.src,dataURL长这样

data:image/jpeg;base64,/9j/4R/+RXhpZgAATU0AKgAAAAgACgEPAAIAAAAGAAAAhgEQAAIAAAAJ...

dataURL会很长很长。2.另外一种比较优雅的方式是在不读取文件内容的情况下,利用window.URL.createObjectURL(file),生成文件在内存中的地址uri赋值给img.src,地址uri长这样

blob:null/a6d04e25-c6e9-4c7d-b1c4-ecf8dab60e35;

简短很多,也节省了把文件读取进js的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值