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 相关文章推荐
[原创]站长必须要知道的javascript广告代码
May 30 Javascript
百度留言本js 大家可以参考下
Oct 13 Javascript
基于pthread_create,readlink,getpid等函数的学习与总结
Jul 17 Javascript
javascript常用方法汇总
Dec 02 Javascript
JS实现在页面随时自定义背景颜色的方法
Feb 27 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
Jan 07 Javascript
使用JS中的exec()方法构造正则表达式验证
Aug 01 Javascript
js实现淡入淡出轮播切换功能
Jan 13 Javascript
完美解决浏览器跨域的几种方法(汇总)
May 08 Javascript
Vue computed计算属性的使用方法
Jul 14 Javascript
基于vue开发的在线付费课程应用过程
Jan 25 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
Jul 18 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
锁定年轻人的双倍活力 星巴克推出星倍醇即饮浓咖啡
2021/03/03 咖啡文化
php与paypal整合方法
2010/11/28 PHP
深入理解PHP中的count函数
2016/05/31 PHP
php设计模式之单例模式代码
2016/06/11 PHP
php实现压缩合并js的方法【附demo源码下载】
2016/09/22 PHP
PHP自定义序列化接口Serializable用法分析
2017/12/29 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
JavaScript在IE中“意外地调用了方法或属性访问”
2008/11/19 Javascript
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
Javascript中查找不以XX字符结尾的单词示例代码
2013/10/15 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
jquery实现炫酷的叠加层自动切换特效
2015/02/01 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
jsp 自动编译机制详细介绍
2016/12/01 Javascript
js时间控件只显示年月
2017/01/08 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
基于 jQuery 实现键盘事件监听控件
2019/04/04 jQuery
vue实现简单的日历效果
2020/09/24 Javascript
解决Vue 给mapState中定义的属性赋值报错的问题
2020/06/22 Javascript
[01:08:43]DOTA2-DPC中国联赛定级赛 Phoenix vs DLG BO3第一场 1月9日
2021/03/11 DOTA
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
python 统计数组中元素出现次数并进行排序的实例
2018/07/02 Python
Python实现繁?转为简体的方法示例
2018/12/18 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
通过Python扫描代码关键字并进行预警的实现方法
2020/05/24 Python
联想西班牙官网:Lenovo西班牙
2018/08/28 全球购物
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
三星加拿大官方网上商店:Samsung CA
2020/12/18 全球购物
《珍珠泉》教学反思
2014/02/20 职场文书
电子商务实训报告总结
2014/11/05 职场文书
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
2021/04/06 Python