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 相关文章推荐
JS 事件绑定函数代码
Apr 28 Javascript
JavaScript中两个感叹号的作用说明
Dec 28 Javascript
JavaScript cookie的设置获取删除详解
Feb 11 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
Jun 16 Javascript
js 左右悬浮对联广告代码示例
Dec 12 Javascript
最精简的JavaScript实现鼠标拖动效果的方法
May 11 Javascript
JS或jQuery获取ASP.NET服务器控件ID的方法
Jun 08 Javascript
javascript基础语法学习笔记
Jan 04 Javascript
利用jquery实现瀑布流3种案例
Sep 18 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
微信小程序实现漂亮的弹窗效果
May 26 Javascript
原生js实现购物车
Sep 23 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的图形函数中显示汉字
2006/10/09 PHP
数据库的日期格式转换
2006/10/09 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
浅析php工厂模式
2014/11/25 PHP
PHP四舍五入、取整、round函数使用示例
2015/02/06 PHP
PHP往XML中添加节点的方法
2015/03/12 PHP
php简单图像创建入门实例
2015/06/10 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
jQuery 源码分析笔记(7) Queue
2011/06/19 Javascript
让AJAX不依赖后端接口实现方案
2012/12/03 Javascript
JS控制弹出悬浮窗口(一览画面)的实例代码
2016/05/30 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
利用canvas实现的加载动画效果实例代码
2017/07/05 Javascript
node.js的exports、module.exports与ES6的export、export default深入详解
2017/10/26 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
NodeJs 文件系统操作模块fs使用方法详解
2018/11/26 NodeJs
vue组件内部引入外部js文件的方法
2020/01/18 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
在Python中使用第三方模块的教程
2015/04/27 Python
详解python的数字类型变量与其方法
2016/11/20 Python
Python脚本实现自动将数据库备份到 Dropbox
2017/02/06 Python
matplotlib实现区域颜色填充
2019/03/18 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
2019/12/12 Python
Python3.8安装Pygame教程步骤详解
2020/08/14 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
拉夫劳伦爱尔兰官方网站:Ralph Lauren爱尔兰
2020/04/10 全球购物
文员岗位职责范本
2014/03/08 职场文书
《理想的风筝》教学反思
2014/04/11 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
学习走群众路线心得体会
2014/11/05 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
大学生,三分钟即兴演讲稿
2019/07/22 职场文书
OpenCV全景图像拼接的实现示例
2021/06/05 Python