通过FileReader,和es6的方法解构赋值,promise对象简单封装上传预览
具体逻辑:选中图片之后,触发onchange方法,获得上传文件对象,调用fileReader方法验证图片是否符合上传需求,符合返回图片文本,不符合返回错误信息。
先介绍几个技术点,没接触过的朋友,可以先看看:
Promise对象:是异步编程的一种解决方案,里面保存着某个未来才会结束的事件的结果。Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理。技术连接:#docs/promise
解构赋值:按照一定模式,从数组和对象中提取值,对变量进行赋值。技术链接:#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); } ) }