在工做各类业务中,咱们常常会遇到一个上传图片,文件的功能,今天我就来总结下上传文件功能。javascript
1.疑问?css
01.文件上传是什么?怎么触发的?它在各个浏览器长得什么样子的?html
02.文件上传怎么操做?他是有什么对象?对象有什么方法和属性?前端
下面咱们抱着这个心态来解疑!html5
2.解疑!java
01.文件上传是 <input type="file">能够来点击按钮来弹出系统本身带文件选项框git
上代码图github
接下来就看各个浏览器下<input type="file">下长什么样子的吧!(为了写博客,我硬生生的把五个浏览器都安在了我电脑上,也是蛮拼的,哈哈哈哈哈)web
google数组
ie
firefox
opera
safa
你们都看到了<input type="file">的样子了吧,各个浏览器默认样式彻底不相同而且当咱们点到文字区域时也会触发上传弹窗(ie是浏览旁边的那个长条)
因此咱们须要改变他的样式,因此接下来就靠css来使他在各个浏览器表现一致了,上代码
.fileUpload-group{ position: relative; width:300px; height:80px; overflow: hidden; cursor: pointer; line-height: 80px; font-size: 16px; text-align: center; color: #fff; background-color: #e00; border-radius: 5px; } .fileUpload-group input{ position: absolute; top:0; left:0; font-size: 300px; opacity: 0; filter: alpha(opacity=0); cursor: pointer; } .fileUpload-group:hover{ background-color: #e70; }
因此在全部浏览器下都表现这个样式
另外多提一句<input type="file">只能选择单个文件要想选择多个文件要这样写<input type="file" multiple>,若是要选择文件夹上传 能够加入webkit的属性webkitdirectory,不过好像就webkit支持
参考资料传送门:危险的文件夹上床框 http://www.cnblogs.com/index-html/p/dialog-phishing.html
02. HTML文档中每添加一个<input type="file">实际就建立了一个fileUpload实例对象,用户能够经过点击file控件选择本地文件!
附上w3c官网fileUpload参考资料http://www.w3school.com.cn/jsref/dom_obj_fileupload.asp
看代码以下
var fileUp = document.getElementById("fileUpload"); fileUp.onchange = function(){ console.log(this.files); }
若是咱们按住ctrl键那么接下来就是这个样子的
因此你们都明白了吧 因此files属性的值是一个FileList类型的对象,它和数组相似,一样拥有length属性,用户要上传的文件Type name size 等信息能够用做与逻辑判断用户上传的东西是否是符合需求,从而作判断!固然这个也有兼容性IE9及如下版本不支持。
虽然咱们知道了文件的东西可是无法操做呀,难道就这么传给后台而不作处理?显然不是,咱们须要使用上html5新对象FileReader
附上html5新对象FileReader地址https://w3c.github.io/FileAPI/#dfn-filereader
咱们在谷歌控制台下打出下面代码
你们也看到了也有这些属性固然在他的原型链又继承另一些属性看下图
因此下面看代码
var fileUp = document.getElementById("fileUpload"); fileUp.onchange = function(){ var file = this.files[0]; console.log(this.files); var reader = new FileReader(); reader.onload = function(ev) { console.log(ev.target.result); }; reader.readAsText(file); }
这篇博客重在了解file没有任何案例吧
能够参考京东前端郑前辈的博客http://www.seejs.com/archives/668;http://www.seejs.com/archives/671;http://www.seejs.com/archives/691