javascript HTML5文件上传FileReader API


Posted in Javascript onMarch 27, 2020

文件上传功能现在是越来越普遍,所有的社交网站,媒体网站,比如优酷视频,微博等,都提供了上传图片,上传视频等功能。但过去WEB程序员都很清楚,用HTML表单上传文件是很麻烦的事情,特别是你想了解一下用户上传的文件的一些属性,必须等它上传完成后才能知道。

未知的东西上传到服务器上,有可能产生安全问题,也有可能体积太大,超过允许,浪费空间。现在好了,WEB技术在进步,HTML5带来了很多好东西。这个FileReader API就能让你在用户上传之前就能获取上传文件的一些基本属性。

HTML代码

这个FileReader API 的工作原理和 File API 一样,需要使用input[type="file"] 元素:

<-- 一个能上传多媒体文件的表单 -->
<input type="file" id="upload-file" multiple />

<-- 显示图片的地方 -->
<div id="destination"></div>

在File API这篇文章里有详细的关于能读取到的文件的相关信息,比如地址,体积,尺寸大小,文件类型等等。

JavaScript

这个例子中我们用input表单域上传一张图片,当用户在自己的电脑里选中一张图片后,这个图片会被显示到页面上:

document.getElementById('upload-file').addEventListener('change', function() {
 var file;
 var destination = document.getElementById('destination');
 destination.innerHTML = '';

 // 循环用户多选的文件
 for(var x = 0, xlen = this.files.length; x < xlen; x++) {
 file = this.files[x];
 if(file.type.indexOf('image') != -1) { // 非常简单的交验

 var reader = new FileReader();

 reader.onload = function(e) {
 var img = new Image();
 img.src = e.target.result; // 显示图片的地方

 destination.appendChild(img);
 };
 
 reader.readAsDataURL(file);
 }
 }
});

这个例子里,我们使用FileReader里的readAsDataURL方法将图片内容转换成base64编码的字符串,然后使用图片的data URI方式显示它。其它的FileReader读取方法还有readAsText, readAsArrayBuffer和readAsBinaryString等

有了这个FileReader API,我们就可以避免用户先将文件上传到服务器,在浏览器客户端我们就可以进行操作。这些在上传到服务器前的预处理是很有必要的。

以上就是本文的全部内容,希望对大家的学习有所帮助。

Javascript 相关文章推荐
用js实现的仿sohu博客更换页面风格(简单版)
Mar 22 Javascript
jQuery 源码分析笔记(3) Deferred机制
Jun 19 Javascript
JS获取html对象的几种方式介绍
Dec 05 Javascript
JS的事件绑定深入认识
Jun 26 Javascript
js实现异步循环实现代码
Feb 16 Javascript
关于JS中match() 和 exec() 返回值和属性的测试
Mar 21 Javascript
BootStrap中
Dec 10 Javascript
easyUI下拉列表点击事件使用方法
May 18 Javascript
js获取地址栏参数的两种方法
Jun 27 Javascript
带你快速理解javascript中的事件模型
Aug 14 Javascript
Vue组件之单向数据流的解决方法
Nov 10 Javascript
微信小程序基于canvas渐变实现的彩虹效果示例
May 03 Javascript
JavaScript中文件上传API详解
Apr 01 #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
You might like
PHP对象Object的概念 介绍
2012/06/14 PHP
Linux下安装PHP MSSQL扩展教程
2014/10/24 PHP
ThinkPHP3.2.2实现持久登录(记住我)功能的方法
2016/05/16 PHP
PHP使用mongoclient简单操作mongodb数据库示例
2019/02/08 PHP
splice slice区别
2006/10/09 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
js hover 定时器(实例代码)
2013/11/12 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
js身份证判断方法支持15位和18位
2014/03/18 Javascript
使用jQuery异步加载 JavaScript脚本解决方案
2014/04/20 Javascript
node.js中的buffer.toJSON方法使用说明
2014/12/14 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
JS中from 表单序列化提交的代码
2017/01/20 Javascript
详解使用vue实现tab 切换操作
2017/07/03 Javascript
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
[03:07]【DOTA2亚洲邀请赛】我们,梦开始的地方
2017/03/07 DOTA
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
一个基于flask的web应用诞生 组织结构调整(7)
2017/04/11 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
浅析HTML5 Landmark
2020/09/11 HTML / CSS
美国最大的珠宝商之一:Littman Jewelers
2016/11/13 全球购物
本科生详细的自我评价
2013/09/19 职场文书
终端业务员岗位职责
2013/11/27 职场文书
高中学生期末评语
2014/04/25 职场文书
关爱残疾人演讲稿
2014/05/24 职场文书
初中运动会前导词
2015/07/20 职场文书
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL
redis复制有可能碰到的问题汇总
2022/04/03 Redis