怎么利用html5 file api读取本地文件
本文小编为大家详细介绍"怎么利用html5 file api读取本地文件",内容详细,步骤清晰,细节处理妥当,希望这篇"怎么利用html5 file api读取本地文件"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
通过file类型的input获取FileList
或html5新增的可进行文件多选的multiple属性:
一般,我们都是给input:file绑上一个onchange事件,以便在用户选定文件后,马上进行读取文件等下一步操作:
//原生jsvar 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读取本地文件"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。