html5图片上传使用FileReader预览

时间: 2019-01-05阅读: 1383标签: 图片

通过FileReader,和es6的方法解构赋值,promise对象简单封装上传预览

具体逻辑:选中图片之后,触发onchange方法,获得上传文件对象,调用fileReader方法验证图片是否符合上传需求,符合返回图片文本,不符合返回错误信息。

先介绍几个技术点,没接触过的朋友,可以先看看:

Promise对象:是异步编程的一种解决方案,里面保存着某个未来才会结束的事件的结果。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。技术连接:http://es6.ruanyifeng.com/#docs/promise

解构赋值:按照一定模式,从数组和对象中提取值,对变量进行赋值。技术链接:http://es6.ruanyifeng.com/#docs/destructuring

FileReader对象:允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用file或blob对象指定要读取的文件或数据。技术链接:https://developer.mozilla.org/zh-CN/docs/Web/API/FileReader


图片的预览处理逻辑

    /**
     * @description         接收jpg,png,gif后缀的图片,返回图片文本
     * @param obj.file      文件对象, File.files[0]
     * @param obj.size      预览文件大小(kb),默认值200
     * @param obj.width     图片宽度,默认为200px
     * @param obj.height    图片高度,默认为200px
     * @return  Promise
     * */
    function fileReader({file = null, size = 200, width = 200, height = 200} = {}) {
        return new Promise((resolve, reject) => {
                if (!/\.(jpe?g|png|gif)$/i.test(file.name)) {
                    reject(‘请后缀为jpg,png,gif的图片‘);
                }
                let imgSize = file.size / 1024;  //计算文件大小,单位kb
                if (imgSize > file.size) {
                    reject(‘请上传大小不要超过‘ + size + ‘kb的图片‘);
                }
                let reader = new FileReader();
                reader.onload = ((e) => {
                    //创建一个image对象,判断宽高
                    let image = new Image();
                    image.onload = (() => {
                        if (image.width != width || image.height != height) {
                            reject("图片宽高必须为:" + width + "*" + height);
                        }
                        resolve(e.target.result);
                    });
                    image.src = e.target.result;
                });
                reader.readAsDataURL(file);
            }
        )
    }

方法参数使用解构赋值,设置默认值,具体默认值请结合项目设置;使用Promise对象创建实例new Promise((resolve, reject) => {});resolve,reject是两个函数,resolve将Promise对象的状态从“未完成”变为“成功”,reject将Promise对象的状态从“未完成”变为“失败”,如果图片不符合要求,相关提示通通调用reject函数。创建一个图片对象,主要是获取图片的宽高做验证,如果使用图片裁剪,请忽略此步骤。如果宽高验证成功,将图片文本传入给resolve函数。

    

调用fileReader函数

function fileLoad(e) { 
let fileObj = { file: e.files[0], //图片对象 size: 100, //图片最大为100kb width: 700, //上传图片宽度 height: 700 //上传图片高度 } fileReader(fileObj).then(data => { //文件预览正确,将图片展示到页面 document.getElementById("preview").innerhtml = "<img src=‘" + data + "‘/>"; document.getElementById("error").innerhtml = ""; }, error => { //文件预览出错了,根据项目提示用户 document.getElementById("preview").innerHTML = ""; document.getElementById("error").innerHTML = "错误信息:" + error; }); }

定义图片上传要求,根据fileReader处理情况,then方法可以接受两个回调函数作为参数。第一个回调函数是Promise对象的状态变为resolved时调用,第二个回调函数是Promise对象的状态变为rejected时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise对象传出的值作为参数。

 

在线测试链接:https://www.lqmohun.com/demo/FileReader.html

推荐一个免费Api网站:https://www.lqmohun.com 

原文来自:https://www.cnblogs.com/Mohun-Blogs/p/10221895.html


 

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/1778

HTML img src图片路径不存在,则显示一张默认图片的方法

我们一般会给图片设置 alt 属性,当图片路径不存在时可以显示提示文字。但是这样很不好看,如果用在文章列表,我们可以给 img 标签设置一个 onerror 属性,可以在 src 路径不存在时显示指定的默认图片

性感与色情有多远_你不知道的图片鉴黄那些事

图片鉴黄服务市场容量巨大,作为移动互联网行业最为热门的创业领域,移动社交类App每天生产大量图片,并有无数色情图片混杂其中,所以高效准确地鉴别和剔除淫秽色情信息成为一项十分艰巨的任务。此外,移动直播的大热也导致图片鉴黄需求大增,尤其对于中小开发团队而言

前端图片懒加载的实现,采用Lazy Load 图片延迟加载提高用户体验

对于图片过多的页面,为了加速页面加载速度,所以很多时候我们需要将页面内未出现在可视区域内的图片先不做加载, 等到滚动到可视区域后再去加载。这样子对于页面加载性能上会有很大的提升,也提高了用户体验。

html2canvas保存图片模糊问题解决

使用官网的CDN,网上可以查到很多解决方案,常用的主要就是:canvas先放大,其次加个dpi效果也可以,代码如下:

根据图片url链接判断图片大小

背景:产品需求,input框输入图片链接,点击检测按钮的时候需要判断该图片不超过2M

webp图像格式

这是支持在互联网上无损和有损图像质量压缩的新格式。谷歌公司开发这种格式专为在网上迅速和方便地做好工作。其主要优点是,相对于其他图像格式,文件小,但图像质量相似。

nodejs实现二维码生成及图片合成

前端需要做分享功能。生成二维码后 在指定的图片上添加二维码和邀请码生成新的图片。1.使用 qr-code生成二维码;2.使用 text-to-svg 生成邀请码图片,字符转图片;3.使用gm工具合成图片

网页上常用的图片格式及使用场景

jpg:有损压缩格式,靠损失图片本身的质量来减小图片的体积,gif:无损压缩格式,靠损失图片的色彩数量来减小图片的体积,支持透明,支持动画,png:无损压缩格式,适用于颜色数量较少的图像;svg:可缩放矢量图形

css怎么让背景图片铺满?

css让图片铺满的方法:可以使用background-size:cover样式设置背景图片铺满。background-size属性规定背景图像的尺寸。

css实现图片剪裁居中_利用css属性object-fit

列表显示图片的时候,一般设置图片宽度自适应,那么高度就会根据图片本身的宽高比等比缩放,怎么才能实现图片居中剪切,避免图片变形呢,css属性object-fit就可以实现

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!