想要用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实现移动端图片上传&预览效果的更多相关文章

  1. Jquery图片上传预览效果

    uploadPreview.js jQuery.fn.extend({ uploadPreview: function (opts) { var _self = this, _this = $(thi ...

  2. 使用iframe实现图片上传预览效果

    原理:将图片上传的页面放在iframe中,这样就可以在iframe中将图片提交到服务器而不需要页面刷新,提交成功后用脚本实现主页面显示上传的图片. Default.aspx: <%@ Page ...

  3. JS实现图片上传预览效果:方法一

    <script type="text/javascript"> //处理file input加载的图片文件 $(document).ready(function(e) ...

  4. input file图片上传预览效果

    两种方法,方法一: js代码: //头像上传预览 $("#up").change(function() { var $file = $(this); var fileObj = $ ...

  5. ASP.NET工作笔记之一:图片上传预览及无刷新上传

    转自:http://www.cnblogs.com/sibiyellow/archive/2012/04/27/jqueryformjs.html 最近项目里面涉及到无刷新上传图片的功能,其实也就是上 ...

  6. HTML5 图片上传预览

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  7. FileReader()读取文件、图片上传预览

    前言 FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据. 其中File对象可以是来自用户 ...

  8. html,图片上传预览,input file获取文件等相关操作

    input file常用方法: var obj=document.getElementById("upimage"); var file=obj.files[0];//获取文件数据 ...

  9. 移动端 js 实现图片上传 预览

    方法一: <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv=&q ...

随机推荐

  1. zabbix-3.4 触发器

    3 触发器 概述 触发器是"评估"由项目采集的数据并表示当前系统状况的逻辑表达式. 当监控项用于采集系统的数据时,始终遵循这些数据是非常不切合实际的,因为这些数据始终在等待一个令人 ...

  2. pecl install msgpack

    Before the beginning: There are two php version, php5.5, php7.1. we need to install msgpack under ph ...

  3. 虚拟机中Ubuntu安装vmtools

    1.解压vmtools文件为VMWARETO.TGZ VMtools文件一般在系统桌面,如果没有可以点击左上方的"虚拟机-安装VMware Tools"即可出现在桌面,也可以通过U ...

  4. LeetCode Rotate Array 翻转数组

    题意:给定一个数组,将该数组的后k位移动到前n-k位之前.(本题在编程珠玑中第二章有讲) 思路: 方法一:将后K位用vector容器装起来,再移动前n-k位到后面,再将容器内k位插到前面. class ...

  5. World Wind Java开发之十五——加载三维模型(转)

    之前的一篇博客是关于加载粗三维模型的,见http://blog.csdn.net/giser_whu/article/details/43452703,这个地方还存在着不能加载纹理的问题,一直没呢解决 ...

  6. 【BZOJ1972】[SDOI2010] 猪国杀(恶心的大模拟)

    点此看题面 大致题意: 让你模拟一个游戏猪国杀的过程. 几大坑点 对于这种模拟题,具体思路就不讲了,就说说有哪些坑点. 题面有锅,反猪是\(FP\). 数据有锅,牌堆中的牌可能不够用,牌堆为空之后需一 ...

  7. fifo - 先进先出的特殊文件, 又名管道

    描述 (DESCRIPTION) 一个 FIFO 特殊 文件 (又名 管道) 同 管道线 相似, 但是 它是 作为 文件 系统 的一部分 访问的. 可以 有 多个 进程 打开它 以供 读写. 当 进程 ...

  8. 删除临时文件的bat文件

    @echo offecho 正在清除系统垃圾文件,请稍等......del /f /s /q %systemdrive%\*.tmpdel /f /s /q %systemdrive%\*._mpde ...

  9. pytho线程信号量

    pytho线程信号量 import threading,time def going(num,sleep_time): semaphore.acquire()#启动允许执行 print("g ...

  10. Bootstrap 弹出框(Popover)插件

    Bootstrap 弹出框(Popover)插件与Bootstrap 提示工具(Tooltip)插件类似,提供了一个扩展的视图,用户只需要把鼠标指针悬停到元素上面即可.弹出框的内容完全由Bootstr ...