用html5文件api实现移动端图片上传&预览效果
想要用h5在移动端实现图片上传&预览效果,首先要了解html5的文件api相关知识(所有api只列举本功能所需):
1.Blob对象
Blob表示原始二进制数据,Html5的file对象就继承于它,它提供以下属性:
type:mime类型,如果是未知类型则返回一个空字符串
size:Blob对象的字节长度
2.input(type=“file”)控件与file&FileList对象
<input type="file" accept="image/*” multiple id=“file"/>
见上述代码:
multiple:表示file控件允许一次放置多个文件
accept:用来让input只能接受某种类型的文件,但是目前主流浏览器对其的支持都只局限于打开文件选择窗口时,默认选择图片文件而已,如果其他类型文件,file控件也能正常接受。所以要单独加判断:
input file控件有如下两个属性:
name:文件名,不包含路径(悲催的是iphone返回的文件名都是image.***)
lastModifiedDate:文件的最后修改日期
file:控件内用户选择的每一个文件都是一个file对象
FileList:为file对象的列表,访问方法如下:
var files = document.getElementById("file").files
判断代码如下:
for(var k=0;k<files.length;k++){
if(!/image\/\w+/.test(files[k].type)){
alert(files[k].name+"不是图像文件!");
}else{
//此处可加入文件上传的代码
alert(files[k].name+"文件已上传”)
}
}
3.FileReader接口
Filereader接口主要用于把文件读入内存,并且读取文件中的数据,FileReader接口提供了一个异步接口(用于在浏览器主线程中异步访问文件系统),浏览器对FileReader的能力检测代码如下:
if(typeof FileReader == undefined) {
div.innerHTML = "不支持filereader";
}else{
div.innerHTML = "FileReader is ok”;
}
FileReader的方法
readAsDataURL:将文件读取为DataURL(base64最为常见)
FileReader的状态
onabort 数据读取中断
onerror 数据读取出错
onloadstart 开始读取数据
onprogress 读取中
onload 读取成功时触发
onloadend 数据读取完成,无论成功失败都触发
在各种方法中,this.result指向读取的文件数据
4.本功能核心代码如下:
<input type="file" accept="image/*" ref="file" onChange={ctr.onchange} multiple/>
<script>
if(typeof FileReader == undefined&&new FileReader().readAsDataURL) {
alert("不支持filereader");
}else{
var img = document.createElement("img");
document.body.appendChild(img);
var reader = new FileReader();
input = document.getElementById("file");
var onchange = function(){
var files = input.files;
for(var k=0;k<files.length;k++){
if(!/image\/\w+/.test(files[k].type)){
console.log(files[k].name+"不是图像文件!");
}else{
//此处可加入文件上传的代码
console.log(files[k].name+"文件已上传")
}
}
reader.readAsDataURL(files[0]);
reader.onload = function(){
img.src = this.result;
}
}
input.onchange = onchange;
}
</script>
很简单的感觉吧^_^
5.手机浏览器能力测试结果:
用手边的做了下功能支持的能力测试,结果如下,还是很乐观的哦~

用html5文件api实现移动端图片上传&预览效果的更多相关文章
- Jquery图片上传预览效果
uploadPreview.js jQuery.fn.extend({ uploadPreview: function (opts) { var _self = this, _this = $(thi ...
- 使用iframe实现图片上传预览效果
原理:将图片上传的页面放在iframe中,这样就可以在iframe中将图片提交到服务器而不需要页面刷新,提交成功后用脚本实现主页面显示上传的图片. Default.aspx: <%@ Page ...
- JS实现图片上传预览效果:方法一
<script type="text/javascript"> //处理file input加载的图片文件 $(document).ready(function(e) ...
- input file图片上传预览效果
两种方法,方法一: js代码: //头像上传预览 $("#up").change(function() { var $file = $(this); var fileObj = $ ...
- ASP.NET工作笔记之一:图片上传预览及无刷新上传
转自:http://www.cnblogs.com/sibiyellow/archive/2012/04/27/jqueryformjs.html 最近项目里面涉及到无刷新上传图片的功能,其实也就是上 ...
- HTML5 图片上传预览
<!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...
- FileReader()读取文件、图片上传预览
前言 FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据. 其中File对象可以是来自用户 ...
- html,图片上传预览,input file获取文件等相关操作
input file常用方法: var obj=document.getElementById("upimage"); var file=obj.files[0];//获取文件数据 ...
- 移动端 js 实现图片上传 预览
方法一: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&q ...
随机推荐
- 数据字典的设计--3.首页添加删除表格(JS实现)
页面效果: JS代码: 1.添加表格 function insertRows(){ //获取表格对象 var tb1 = $("#dictTbl"); var tempRow = ...
- 送H-1B 及其他I-129 申请别忘用新表
(梁勇律师事务所,lianglaw.com专稿)移民局从2010年11月23日 更新了申请H-1B 及其他非移民工作签证I-129 表,从2010年12月23日以后收到的I-129表都必须是2010年 ...
- (转) HTTP Request header
HTTP Request header 当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等. 无论Web技术在未来如何发展,理解Web程序之间通信的基 ...
- 禁止windows自动更新后重新启动
运行gpedit.msc: 按照下图操作: 参考:http://www.xitongcheng.com/jiaocheng/win7_article_94.html
- Redis多机数据库
复制 PSYNC命令具有完整重同步(full resynchronization)和部分重同步(partial resynchronization)两种模式: ·其中完整重同步用于处理初次复制情况:完 ...
- JS中的toString()和valueOf()方法
1.toString()方法:主要用于Array.Boolean.Date.Error.Function.Number等对象转化为字符串形式.日期类的toString()方法返回一个可读的日期和字符串 ...
- POJ 3046 Ant Counting(递推,和号优化)
计数类的问题,要求不重复,把每种物品单独考虑. 将和号递推可以把转移优化O(1). f[i = 第i种物品][j = 总数量为j] = 方案数 f[i][j] = sigma{f[i-1][j-k], ...
- wu2198:难得的波段抄底机会
很好的波段抄底机会 个人浅见看,目前染料股跌出的机会明显,养殖股波段机会明显,芯片.半导体.集成电路.北导.软件.国产操作系统等科技股短线机会不错.另外,大盘指数2856/2806区域的波段操作机会不 ...
- JDK和CGLIB动态代理原理区别
JDK和CGLIB动态代理原理区别 https://blog.csdn.net/yhl_jxy/article/details/80635012 2018年06月09日 18:34:17 阅读数:65 ...
- 数据库sql语句的exists和in的区别
性能变化的关键: #1 执行的先后顺序 谁是驱动表,谁先执行查询,谁后执行查询 #2 执行过程 exists的优点是:只要存在就返回了,这样的话很有可能不需要扫描整个表. in需要扫描完整个表,并 ...