如何预览将要上传的图片-使用H5的FileAPI
这篇将要说的东西已经不新鲜了.
参考资料: Reading files in JavaScript using the File APIs (鉴于作者在美国, 我姑且认为作者母语是英语, 当然链接中有本地化可以选择中文)
要做什么效果呢, 就是页面上有个<input type="file" />, 用户选择需要上传的图片后, 页面上显示将要上传的图片.
以前呢, 需要Ajax将原图上传到服务器, 得到成功响应后在页面上添加一张图片. 如果用户发现上传错了, 需要把服务器上的相应图片删除.
现在呢, 可以这样, 先上代码:
document.querySelector('#upfile').onchange = function (evt) {
var files = evt.target.files;
for(var i = 0, f; f = files[i]; i++){
if(!f.type.match('image.*')) continue;
var reader = new FileReader();
reader.onload = (function(theFile){
return function(e){
var img = document.createElement('img');
img.title = theFile.name;
img.src = e.target.result;
document.body.appendChild(img); //这里你想插哪插哪
}
})(f);
reader.readAsDataURL(f);
}
}
document.querySelector('#upfile').onchange = function () {
var fileReader = new FileReader();
fileReader.onload = function (e) {
if (fileReader.readyState == FileReader.DONE) {
var img = document.createElement('img');
img.src = this.result;
document.body.appendChild(img); //示例只是简单插入body
}
}
//一次加载多个文件
var i = 0, src = this.files;
fileReader.readAsDataURL(src[i]);
fileReader.onloadend = function () {
i++;
if (i < src.length) fileReader.readAsDataURL(src[i]);
}
}
这是我写的, 你们就别看了
转载请注明出处: http://www.cnblogs.com/zaiyuzhong/p/reading-files-by-fileAPIs.html
相应的html节点: <input type="file" id="upfile" multiple /> (如果不使用多选除去multiple)
这段代码的关键在被实例化的FileReader对象上, FileReader包括四个异步读取文件的选项:
- FileReader.readAsBinaryString(File|Blob) // result将包含二进制字符串形式的数据
- FileReader.readAsText(File|Blob, [encoding]) // result将包含字符串形式的数据, 编码格式默认utf-8, 可通过encoding参数指定
- FileReader.readAsDataURL(File|Blob) // result将包含数据网址形式的数据
- FileReader.readAsArrayBuffer(File|Blob) // result将包含ArrayBuffer形式的数据
调用某种方法后, 会有 onloadstart, onprogress, onload, onabort, onerror 和 onloadend 这几种事件.
当然, FileAPI可不只有这点东西, 更多的请看参考资料.
如何预览将要上传的图片-使用H5的FileAPI的更多相关文章
- 用js实现预览待上传的本地图片
js实现预览待上传的本地图片,代码如下: <form name="form5" id="form5" method="post" ac ...
- 基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现
前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览.上传,并且支持三种方式添加图片到上传列表:选择图片.复制粘贴图片 ...
- 原生js实现图片预览并上传
最近主导的PC客户端网站重构工程告一段落,下一阶段开始给公司APP开发H5页面,技术栈是react.最近碰到一个需求:需要在H5页面上添加身份证照片,预览并上传.因为要兼容安卓4.4以下版本的手机,所 ...
- 前端图片预览,上传前预览,兼容IE7、8、9、10、11,Firefox,Chrome(学习到的知识)
文章地址:http://www.cnblogs.com/rubylouvre/p/4597344.html 一.window.URL 在Chrome中,window.URL和window.webkit ...
- js多图预览及上传功能
<%-- Created by IntelliJ IDEA. User: Old Zhang Date: 2018/12/27 Time: 11:17 To change this templa ...
- html5 选择多张图片在页面内预览并上传到后台
版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/huangxin112/article/details/74956462 需求:点击选择图片(可选多张) ...
- js-jssdk微信H5选择多张图片预览并上传(兼容ios,安卓,已测试)
值得注意的是: 1.在微信H5中选择图片运用:wx.chooseImage,成功后返回: res.localIds用于上传图片使用 上传图片:wx.uploadImage. 2.上传图片的时候 ...
- H5-FileReader实现图片预览&Ajax上传文件
图片预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- vue组件利用formdata图片预览以及上传《转载》
转载修改 在项目中直接新建一个单文件页,复制一下代码即可 upload组件: <template> <div class="vue-uploader" ...
随机推荐
- linux REDHAT6.4下安装ArcGIS Server 10.1
1 安装环境 因为Linux的发行版本比较多,我们在使用的时候请严格按照官网给的给出的版本,在官网上给出的是经过严格测试的,如果采用其他的,即便安装上了,在后续的运作中出现问题,这个可就麻烦了,官网对 ...
- 初识Docker和Windows Server容器
概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...
- [Unity] Shader(着色器)之纹理贴图
在Shader中,我们除了可以设定各种光线处理外,还可以增加纹理贴图. 使用 settexture 命令可以为着色器指定纹理. 示例代码: Shader "Sbin/ff2" { ...
- Linux字符集的查看及修改
一·查看字符集 字符集在系统中体现形式是一个环境变量,以CentOS6.5为例,其查看当前终端使用字符集的方式可以有以下几种方式: 第一种: [root@Testa-www tmp]# echo $L ...
- codevs1021 玛丽卡
题目描述 Description 麦克找了个新女朋友,玛丽卡对他非常恼火并伺机报复. 因为她和他们不住在同一个城市,因此她开始准备她的长途旅行. 在这个国家中每两个城市之间最多只有一条路相通,并且我们 ...
- H5案例分享:移动端touch事件判断滑屏手势的方向
移动端touch事件判断滑屏手势的方向 方法一 当开始一个touchstart事件的时候,获取此刻手指的横坐标startX和纵坐标startY: 当触发touchmove事件时,在获取此时手指的横坐标 ...
- 用Canvas写桌球游戏!!!
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 昨天上班的时候闲着无事,就用Canvas写了个桌球游戏来玩玩....所以就拿这游戏上来水一发.或许对一些刚学canvas的人有帮助. 话说 ...
- 各大浏览器hack
浏览器界的奇葩IE 样式前缀法,在需要制定某些浏览器只识别其中某些属性的时候: chrome/safari 都是webkit内核的浏览器.在属性前加前缀-webkti- firefox 只在火狐浏览器 ...
- Ext 修改Store初始化加载完后修改record属性。
/** * Created by huangbaidong on 2016/9/18. * 产品组件通用Store, */ Ext.define('app.component.ebs.itemdata ...
- Python~切片Slice
[:] [:10] [-10:] [':10:2]