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对象及属性
Feb 13 Javascript
ImageFlow可鼠标控制图片滚动
Jan 30 Javascript
javascript中自定义对象的属性方法分享
Jul 12 Javascript
javascript放大镜效果的简单实现
Dec 09 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
May 05 Javascript
JavaScript中最常用的10种代码简写技巧总结
Jun 28 Javascript
Django使用多数据库的方法
Sep 06 Javascript
JavaScript事件委托原理与用法实例分析
Jun 07 Javascript
AngularJS实现与后台服务器进行交互的示例讲解
Aug 13 Javascript
ES6知识点整理之对象解构赋值应用示例
Apr 17 Javascript
js和jquery判断数据类型的4种方法总结
Aug 28 jQuery
Vue使用Element实现增删改查+打包的步骤
Nov 25 Vue.js
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
模仿OSO的论坛(三)
2006/10/09 PHP
简单的PHP图片上传程序
2008/03/27 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP排序二叉树基本功能实现方法示例
2018/05/26 PHP
JQuery 1.6发布 性能提升,同时包含大量破坏性变更
2011/05/10 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
js的2种继承方式详解
2014/03/04 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
详解微信小程序设置底部导航栏目方法
2017/06/29 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
Vue-CLI 3.X 部署项目至生产服务器的方法
2019/03/22 Javascript
JS实现的对象去重功能示例
2019/06/04 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
2019/11/06 Javascript
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
JavaScript中如何调用Java方法
2020/09/16 Javascript
Vue项目如何引入bootstrap、elementUI、echarts
2020/11/26 Vue.js
[03:30]完美盛典趣味短片 CSGO2019年度名场面
2019/12/07 DOTA
python并发编程多进程之守护进程原理解析
2019/08/20 Python
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
利用HTML5实现使用按钮控制背景音乐开关
2015/09/21 HTML / CSS
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
阿联酋航空丹麦官方网站:Emirates DK
2019/08/25 全球购物
计算机专业应届毕业生自荐信
2013/09/26 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
运动会闭幕词
2015/01/28 职场文书
幼儿园母亲节活动总结
2015/02/10 职场文书
迎新生晚会主持词
2015/06/30 职场文书
离婚民事起诉状
2015/08/03 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android