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 相关文章推荐
prototype与jquery下Ajax实现的差别
Sep 13 Javascript
JQuery Ajax通过Handler访问外部XML数据的代码
Jun 01 Javascript
js调用后台servlet方法实例
Jun 09 Javascript
js中对象的声明方式以及数组的一些用法示例
Dec 11 Javascript
JS实现文字链接感应鼠标淡入淡出改变颜色的方法
Feb 26 Javascript
js行号显示的文本框实现效果(兼容多种浏览器 )
Oct 23 Javascript
AngularJS学习笔记(三)数据双向绑定的简单实例
Nov 08 Javascript
jQuery实现弹窗居中效果类似alert()
Feb 27 Javascript
ES6教程之for循环和Map,Set用法分析
Apr 10 Javascript
js数字滑动时钟的简单实现(示例讲解)
Aug 14 Javascript
vue中,在本地缓存中读写数据的方法
Sep 21 Javascript
javascript 原型与原型链的理解及应用实例分析
Feb 10 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实现HTML生成PDF文件的方法
2014/11/07 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
php创建桌面快捷方式实现方法
2015/12/31 PHP
Laravel Memcached缓存驱动的配置与应用方法分析
2016/10/08 PHP
用js模拟JQuery的show与hide动画函数代码
2010/09/20 Javascript
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
jquery parent和parents的区别分析
2013/10/02 Javascript
Extjs4中Form的使用之本地hiddenfield
2013/11/26 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
javascript实现全角与半角字符的转换
2015/01/07 Javascript
JS数组的常见用法实例
2015/02/10 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
AngularJS入门教程之与服务器(Ajax)交互操作示例【附完整demo源码下载】
2016/11/02 Javascript
discuz表情的JS提取方法分析
2017/03/22 Javascript
微信小程序日历/日期选择插件使用方法详解
2018/12/28 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
原生JS实现留言板
2020/03/26 Javascript
解决vue cli4升级sass-loader(v8)后报错问题
2020/07/30 Javascript
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
Python实现注册、登录小程序功能
2018/09/21 Python
Python设计模式之策略模式实例详解
2019/01/21 Python
django 信号调度机制详解
2019/07/19 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
Python双链表原理与实现方法详解
2020/02/22 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
html5简介_动力节点Java学院整理
2017/07/07 HTML / CSS
天巡全球:Skyscanner Global
2017/06/20 全球购物
行政专员岗位职责
2014/01/02 职场文书
聚美优品广告词改编
2014/03/14 职场文书
情人节寄语大全
2014/04/11 职场文书
党建工作先进材料
2014/05/02 职场文书
建筑安全责任书范本
2014/07/24 职场文书
倡议书范文大全
2015/04/28 职场文书
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python
MySQL生成千万测试数据以及遇到的问题
2022/08/05 MySQL