这篇将要说的东西已经不新鲜了.

  参考资料: 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的更多相关文章

  1. 用js实现预览待上传的本地图片

    js实现预览待上传的本地图片,代码如下: <form name="form5" id="form5" method="post" ac ...

  2. 基于“formData批量上传的多种实现” 的多图片预览、上传的多种实现

    前言 图片上传是web项目常见的需求,我基于之前的博客的代码(请戳:formData批量上传的多种实现)里的第三种方法实现多图片的预览.上传,并且支持三种方式添加图片到上传列表:选择图片.复制粘贴图片 ...

  3. 原生js实现图片预览并上传

    最近主导的PC客户端网站重构工程告一段落,下一阶段开始给公司APP开发H5页面,技术栈是react.最近碰到一个需求:需要在H5页面上添加身份证照片,预览并上传.因为要兼容安卓4.4以下版本的手机,所 ...

  4. 前端图片预览,上传前预览,兼容IE7、8、9、10、11,Firefox,Chrome(学习到的知识)

    文章地址:http://www.cnblogs.com/rubylouvre/p/4597344.html 一.window.URL 在Chrome中,window.URL和window.webkit ...

  5. js多图预览及上传功能

    <%-- Created by IntelliJ IDEA. User: Old Zhang Date: 2018/12/27 Time: 11:17 To change this templa ...

  6. html5 选择多张图片在页面内预览并上传到后台

    版权声明:本文为博主原创文章,未经博主允许不得转载. http://blog.csdn.net/huangxin112/article/details/74956462 需求:点击选择图片(可选多张) ...

  7. js-jssdk微信H5选择多张图片预览并上传(兼容ios,安卓,已测试)

    值得注意的是: 1.在微信H5中选择图片运用:wx.chooseImage,成功后返回:  res.localIds用于上传图片使用    上传图片:wx.uploadImage. 2.上传图片的时候 ...

  8. H5-FileReader实现图片预览&Ajax上传文件

    图片预览 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...

  9. vue组件利用formdata图片预览以及上传《转载》

    转载修改 在项目中直接新建一个单文件页,复制一下代码即可       upload组件: <template> <div class="vue-uploader" ...

随机推荐

  1. 写个c++小例子

    class Rational{ public: const Rational operator*( const Rational& rhs); Rational(int num); priva ...

  2. Python SMTP邮件模块

    SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件.HTML邮件以及带附件的邮件. Python对SMTP支持有smtplib和email两个模块,email负责构造邮件, ...

  3. 蘑菇街TeamTalk编译连接过程中遇到的问题及解决方法(iOS)

    今天浏览博文的时候,“蘑菇街开源的即时通讯框架,包括iOS.Android.Mac.Windows客户端和后台 Github源码下载地址:https://github.com/mogujie/Team ...

  4. web在线打印,打印阅览,打印维护,打印设计

    winform打印的方案比较多,实现也比较容易,而且效果也非常炫:但现在越来越多的系统是web系统,甚至是移动端.网上也有非常的web打印方案,但各式各样的问题非常多,比如js兼容性,稳定性等一直缠绕 ...

  5. linuxmint 17安装scim输入法

    安装输入法框架: sudo apt-get install scim 安装输入法: sodu apt-get install scim-pinyin 此时启动的输入法的候选词框不随着光标移动,需要安装 ...

  6. 【bzoj1725】[USACO2006 Nov]Corn Fields牧场的安排

    题目描述 Farmer John新买了一块长方形的牧场,这块牧场被划分成M列N行(1<=M<=12; 1<=N<=12),每一格都是一块正方形的土地.FJ打算在牧场上的某几格土 ...

  7. PhpStorm 8.x/9.x 快捷键设置/个性化设置,如何多项目共存?如何更换主题?

    1."自定义"常用快捷键(设置成跟Eclipse差不多) 按照路径:File -> Settings -> Appearance & Behavior -> ...

  8. UVA2636

    理解;类似我们离散的命题  因为只有一个是坏的 超过一个人说你坏  你一定就是坏的  有人说你对 你就对了 分为两种情况 1.说你对的是好的  他的判断是正确的 2.说你对的人 是坏的 他的判断是错误 ...

  9. 时下手机和p2p理财的共同点

    1, 雨后春笋,百家争鸣:一会听说这个又做手机了,一会听说哪哪哪又搞了个P2P. 2, 性价比高的都得靠抢:手机配置高价格低的要抢:p2p利率高时间短的要抢. 3, 竞争惨烈:手机千元机各种血拼:P2 ...

  10. 百度地图SDK

      百度地图官方SDK文档 http://lbsyun.baidu.com/index.php?title=androidsdk   一.申请百度地图SDK 每一个app对应一个百度地图AK,百度地图 ...