JavaScript中文件上传API详解


Posted in Javascript onApril 01, 2016

对于Web程序员来说,在网页上处理文件上传,总是一件很麻烦的事情。在过去,我们不能够通过拖拽上传图片,也没有复杂Ajax上传技术,很少处理多文件批量上传。我们也无法获取上传过程中的信息,除非上传完成后从服务器端获得。有时候,等你上传完毕后才发现上传的文件不合适!

如今,HTML5的革命,现代浏览器的诞生,JavaScript的升级,这些给我们提供了使用Javascript和input[type=file]元素获取上传文件过程信息的能力。

下面就来看看这些上传文件API是如何使用的!

访问要上传的文件列表信息

如果要获得所有input[type=file]里要上传的文件列表,你需要使用files属性:

// Assuming <input type="file" id="upload" multiple>

var uploadInput = document.getElementById('upload');

uploadInput.addEventListener('change', function() {
 console.log(uploadInput.files) // File listing!
});

不幸的是,这个FileList并没有一个叫做forEach的方法,所以我们只能使用老式的循环技巧对FileList进行循环操作:

for (var i = 0, fileCount = uploadInput.files.length; i < fileCount; i++) {
 console.log(files[i]);
}

很重要的一点,FileList里是有一个length属性的。

获取单个上传文件的信息

FileList里的每个文件对象里都保存着大量的关于这个文件的信息,包括文件的体积大小,文件MIME类型,最后修改时间,文件名称等:

{
 lastModified: 1428005315000,
 lastModifiedDate: Thu Apr 02 2015 15:08:35 GMT-0500 (CDT),
 name: "profile.pdf",
 size: 135568,
 type: "application/pdf",
 webkitRelativePath: ""
}

这些基础信息对我们来说最大的用处就是,我们可以在上传文件之前校验它们。例如,你可以校验文件的类型和体积大小:

var maxAllowedSize = 500000;

for (var i = 0, fileCount = uploadInput.files.length, totalSize = 0; i < fileCount; i++) {
 totalSize += files[i].size;
 if(totalSize > maxAllowedSize) {
 // Notify the user that their file(s) are too large
 }

 if(files[i].type != 'application/pdf') {
 // Notify of invalid file type for file in question
 }
}

如果用户上传的文件的体积太大,超过了允许范围,或上传的类型不对,你可以阻止用户上传,然后给予他们必要的提示,是什么原因不能上传成功。

以上就是对文件上传API做的简单介绍,希望对大家的学习有所帮助。

Javascript 相关文章推荐
JObj预览一个JS的框架
Mar 13 Javascript
jQuery EasyUI API 中文文档 DateTimeBox日期时间框
Oct 16 Javascript
Js 获取Gridview选中行的内容操作步骤
Feb 05 Javascript
jquery插件之定时查询待处理任务数量
May 01 Javascript
JQuery设置时间段下拉选择实例
Dec 30 Javascript
Bootstrap嵌入jqGrid,使你的table牛逼起来
May 05 Javascript
jquery简单插件制作(fn.extend)完整实例
May 24 Javascript
jQuery的$.extend 浅拷贝与深拷贝
Mar 08 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
Aug 18 Javascript
如何理解Vue的render函数的具体用法
Aug 30 Javascript
JS脚本实现网页自动秒杀点击
Jan 11 Javascript
Vue的props父传子的示例代码
May 20 Javascript
jquery表单验证插件formValidator使用方法
Apr 01 #Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
Apr 01 #Javascript
jquery分页插件jquery.pagination.js使用方法解析
Apr 01 #Javascript
jQuery实现下拉加载功能实例代码
Apr 01 #Javascript
Extjs实现下拉菜单效果
Apr 01 #Javascript
实例讲解jQuery EasyUI tree中state属性慎用
Apr 01 #Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 #Javascript
You might like
基于PHP创建Cookie数组的详解
2013/07/03 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
PHP贪婪算法解决0-1背包问题实例分析
2015/03/23 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
2020/11/27 PHP
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
jQuery选择器之表单元素选择器详解
2017/09/19 jQuery
vue v-model实现自定义样式多选与单选功能
2018/07/05 Javascript
vue.js使用v-pre与v-html输出HTML操作示例
2018/07/07 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
[01:03:03]VP vs Mineski 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python中getattr函数使用方法 getattr实现工厂模式
2014/01/20 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Django框架使用富文本编辑器Uedit的方法分析
2018/07/31 Python
Selenium chrome配置代理Python版的方法
2018/11/29 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
2019/07/07 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
如何在python中实现随机选择
2019/11/02 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Pytorch数据拼接与拆分操作实现图解
2020/04/30 Python
基于Python爬取搜狐证券股票过程解析
2020/11/18 Python
No module named ‘win32gui‘ 的解决方法(踩坑之旅)
2021/02/18 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
大学同学聚会邀请函
2014/01/19 职场文书
护士长竞聘演讲稿
2014/04/30 职场文书
医学生求职信
2014/07/01 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
2016年综治和平安建设宣传月活动总结
2016/04/01 职场文书