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 实现Table相同行的单元格自动合并示例代码
Aug 27 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
Sep 05 Javascript
Javascript动画的实现原理浅析
Mar 02 Javascript
jQuery实现瀑布流布局详解(PC和移动端)
Sep 01 Javascript
jQuery属性选择器用法示例
Sep 09 Javascript
详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度
Sep 14 Javascript
JS弹性运动实现方法分析
Dec 15 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
Jun 14 Javascript
Angular 利用路由跳转到指定页面的指定位置方法
Aug 31 Javascript
Vue实现调节窗口大小时触发事件动态调节更新组件尺寸的方法
Sep 15 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
Apr 04 Javascript
vue实现标签云效果的示例
Nov 09 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实现短域名互转
2013/07/05 PHP
分享下页面关键字抓取components.arrow.com站点代码
2014/01/30 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
浅谈COOKIE和SESSION区别
2015/07/19 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
基于OO的动画附加插件,可以实现弹跳、渐隐等动画效果 分享
2013/06/24 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
JavaScript日期时间格式化函数分享
2014/05/05 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
JavaScript中的操作符类型转换示例总结
2016/05/30 Javascript
jQuery购物车插件jsorder用法(支持后台处理程序直接转换成DataTable处理)
2016/06/08 Javascript
Vue.js -- 过滤器使用总结
2017/02/18 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
移动端利用H5实现压缩图片上传功能
2017/03/29 Javascript
JS改变页面颜色源码分享
2018/02/24 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
JavaScript实现像雪花一样的Hexaflake分形
2020/07/07 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
Vue表单提交点击事件只允许点击一次的实例
2020/10/23 Javascript
[02:16]DOTA2超级联赛专访Burning 逆袭需要抓住机会
2013/06/24 DOTA
[51:05]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第一局
2016/03/06 DOTA
python连接mysql并提交mysql事务示例
2014/03/05 Python
利用Python查看目录中的文件示例详解
2017/08/28 Python
python爬虫之自动登录与验证码识别
2020/06/15 Python
Python assert语句的简单使用示例
2019/07/28 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
《燕子专列》教学反思
2014/02/21 职场文书
2015年司法所工作总结
2015/04/27 职场文书
新年祝酒词大全
2015/08/11 职场文书
初中思品教学反思
2016/02/20 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
JavaScript 定时器详情
2021/11/11 Javascript