重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
本文小编为大家详细介绍“怎么利用html5 file api读取本地文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么利用html5 file api读取本地文件”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
目前创新互联建站已为千余家的企业提供了网站建设、域名、虚拟空间、绵阳服务器托管、企业网站设计、霍尔果斯网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
通过file类型的input获取FileList
或html5新增的可进行文件多选的multiple属性:
一般,我们都是给input:file绑上一个onchange事件,以便在用户选定文件后,马上进行读取文件等下一步操作:
//原生js var inputElement = document.getElementById("file-input"); inputElement.addEventListener("change", handleFiles, false); function handleFiles() { var fileList = this.files; } //jquery版 $('#file-input').on('change', function() { var fileList = this.files; });
通过拖放操作drop事件
首先要设定一个可供拖放的区域:
另外,为了能触发drop事件,我们必须阻止dragenter和dragover事件的默认行为:
var dropbox; dropbox = document.getElementById("dropbox"); dropbox.addEventListener("dragenter", dragenter, false); dropbox.addEventListener("dragover", dragover, false); dropbox.addEventListener("drop", drop, false); function dragenter(e) { e.stopPropagation(); e.preventDefault(); } function dragover(e) { e.stopPropagation(); e.preventDefault(); }
然后,我们就可以在drop事件的callback中,获取到fileList:
function drop(e) { e.stopPropagation(); e.preventDefault(); var dt = e.dataTransfer; var files = dt.files; handleFiles(files); }
怎么读取或利用file对象呢?
html5提供了两个方案:FileReader和ObjectUrl。
使用FileReader读取file对象
首先需要实例化FileReader对象:
var reader = new FileReader();
利用FileReader读取file对象是一个异步的过程,我们需要先为FileReader设置好load事件的callback,告知FileReader在读取到file对象的数据后应该进行什么进一步的操作:
reader.onload = function(e) { document.getElementById("image").src = e.target.result; }
上面这段代码的意思是,FileReader读取到图片的数据后,把数据(DataUrl)放到的src属性里。
最后,就是通过FileReader不同的方法,来决定读取file对象数据后用什么数据格式来存放,并实施读取:
readAsArrayBuffer(file) :读取file对象并存放为ArrayBuffer对象(ArrayBuffer对象是什么我暂时没有搞清,应该是一种为了高效存取数据而产生的数据结构)。
readAsText(file [, 'UTF-8']) :以一般文本模式读取file对象,值得注意的是,利用第二个参数(可选)可指定字符编码。
readAsDataURL(file) :读取file对象并存放为data: URL格式的字符串。
利用ObjectURL
ObjectURL相当于文件的一个临时路径,此临时路径可随时生成、随时释放,在本地浏览器使用起来时,与普通的url无异。
以把一张本地图片显示在页面上为例:
var img = document.createElement("img"); img.src = window.URL.createObjectURL(file);
此时,src形如:blob:http://test.local.com/e03e8bbf-66ce-4fea-a8c8-772f9fdb4d40
用这个src就能让浏览器从本地读取图片。
这种方案相对用FileReader生成图片的base64编码并放到的src里来说,性能有了很大的提升。
比较这两种读取File对象的方案,FileReader适合用来上传文件,而ObjectURL则适合直接在浏览器进行操作,然后操作后再把处理后的数据进行上传,例如利用canvas截图或进行图片压缩等。当然,这一切都是要考虑兼容性的。
读到这里,这篇“怎么利用html5 file api读取本地文件”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注创新互联行业资讯频道。