/**
* 1. 如何实例化 const fileInput = await FileInput.init(fileInputEle, isMulFile)
*/
export class FileInput {
files = null
isMulFile = false
_isInit = false
constructor(_isInit, isMulFile, files) {
if (!_isInit) {
throw `FileInput 只能调用 init 方法实例化`
}
this.isMulFile = isMulFile
this.files = files
} get file () {
const files = this.files
if (!files || files.length === 0) return null
return files[0]
} static init(fileInputEle, isMulFile) {
return new Promise((resolve, reject) => {
fileInputEle.addEventListener(
'change',
function (e) {
this.files = e.target.files
const fileinput = new FileInput(true, isMulFile, files)
resolve(fileinput)
},
false
)
})
} /**
* getBase64ByCb 和 getAndCreateObjectURL 没有封装私有索性,原因:
* 1. js 中没有保护属性,只能用静态属性来替代
* 2. FileInput 默认是针对单文件,需要扩展多文件的处理,所以保留这个两个方法
* 3. 多文件的处理,需要增加一个类 MulFileInput
*/
// 面向开发者的方法的命名
static _getBase64ByCb(file, cb) {
var reader = new FileReader()
if (file) {
// 图片base64
reader.readAsDataURL(file)
reader.onload = function (e) {
var base64 = reader.result
cb && cb(base64)
}
}
} static _getAndCreateObjectURL = function (blob) {
if (window.URL) {
return window.URL.createObjectURL(blob);
} else if (window.webkitURL) {
return window.webkitURL.createObjectURL(blob);
} else {
return null;
}
} // 面向使用者的方法命名
getFileUrl () {
return FileInput._getAndCreateObjectURL(this.file)
} getSizeTypeNameObj () {
const file = this.file
const obj = {}
obj.name = file.name
obj.type = file.type
obj.size = file.size
return obj
} getBase64 () {
const file = this.file
return new Promise((resolve, reject) => {
FileInput._getBase64ByCb(file, function (base64) {
resolve(base64)
})
})
}
// 去掉base64头
getDelStartBase64(base64) {
const newBase64 = replace(/data\:(.*?);base64\,/, '')
return newBase64
} async getFileObj () {
const obj = this.getSizeTypeNameObj()
const base64 = await getBase64()
Object.assign(obj, {
base64
})
return obj
}
}

获取 base64 的封装的更多相关文章

  1. 上传附件(图片base64)封装方法

    上传附件(图片base64)封装方法 php 上传附件,base64 项目中封装的接口: public function error($msg){ header("Content-type: ...

  2. 关于前端使用JavaScript获取base64图片大小的方法

    base64原理 Base64编码要求把3个8位字节(38=24)转化为4个6位的字节(46=24),之后在6位的前面补两个0,形成8位一个字节的形式. 如果剩下的字符不足3个字节,则用0填充,输出字 ...

  3. cookie的设置、获取和删除封装

    在我们为了去完成数据储存,有时会用到cookie,简单封装一下cookie: <!DOCTYPE html> <html lang="en"> <he ...

  4. 函数return/获取元素样式/封装自己的库

    一:函数return <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&qu ...

  5. 界面信息获取库的封装,记有爱UI助手的诞生

    距离上次写文章已经过去了10个月,这次把我最近做的一个东西的一些心得写下来吧. 上一篇文章写了MSAA技术对于QQ界面信息获取的相关知识,近一段时间我把这个技术包括一些其他的功能做了一个封装并准备公开 ...

  6. 前端获取Base64字符串格式图片Ajax到后端处理

    前端获取到的Base64字符串格式图片一般都是经过处理的图片,例如:裁剪过后的,这里假设data为获取到的Base64字符串格式图片 Base64格式图片的格式为 “data:image/png;ba ...

  7. Android 获取地理位置信息 封装好了 直接用

    前言:花了一个早上研究了以下android获取经纬度,然后网上的参考资料都是杂七杂八,基本上都是过去几年的,现在我用 android6.0参照别人的结果发生好多错误,我的内心几乎是崩溃的.后来,不断百 ...

  8. 上传图片获取base64编码、本地预览

    一.读取文件的对象 — new FileReader()   上传图片接口参数有图片base64编码(数组, imgBase64List ),主要用到 读取文件的对象 [ new FileReader ...

  9. js获取base64格式图片预览上传并用php保存到本地服务器指定文件夹

    html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

随机推荐

  1. SPARKR,对RDD操作的介绍

    (转载)SPARKR,对RDD操作的介绍   原以为,用sparkR不能做map操作, 搜了搜发现可以. lapply等同于map, 但是不能操作spark RDD. spark2.0以后, spar ...

  2. (笔记)Linux内核学习(二)之进程

    一 进程与线程 进程就是处于执行期的程序,包含了独立地址空间,多个执行线程等资源. 线程是进程中活动的对象,每个线程都拥有独立的程序计数器.进程栈和一组进程寄存器. 内核调度的对象是线程而不是进程.对 ...

  3. 负载均衡集群介绍 LVS介绍 LVS调度算法 LVS NAT模式搭建

    LVS BAT模式搭建 更改主机名: hostnamectl set-hostname centos7-three bash 准备工作 • 三台机器 • 分发器,也叫调度器(简写为dir) • 内网: ...

  4. [Tensorflow] RNN - 03. MultiRNNCell for Digit Prediction

    Ref: http://blog.csdn.net/u014595019/article/details/52759104 Time: 2min Successfully downloaded tra ...

  5. 更换 homebrew 国内镜像源

    Brew 是OS X 上类似apt-get以及yum的一个软件包管理器,它依托于Github……………… 所以,虽然你侥幸下载到了 brew,但你肯定是无法更新 brew 的.原因你懂.不过虽然不能更 ...

  6. Win10系统安装过程小记

    1.网上下载ghost系统http://win10.jysmac.cn/win1064.html 2.使用系统自带的激活工具激活 3.到windows官网下载更新工具更新系统,重新安装https:// ...

  7. error: style attribute '@android:attr/windowEnterAnimation' not found.

    在Project/gradle.properties中添加 android.enableAapt2=false

  8. Python标准输出重定向

    目录 Python标准输出重定向 声明 一. 背景知识 二. 重定向方式 2.1 控制台重定向 2.2 print >>重定向 2.3 sys.stdout重定向 2.4 上下文管理器(C ...

  9. Unity3D Shader 马赛克后期效果

    //效果图 //Shader代码 Shader "Hidden/Mosaic" { Properties { _MainTex ("Texture", 2D) ...

  10. day_10 py

    整理代码!!2018-7-24 20:53:49 直接复制了东西: 一些的demo 重点看蓝字部分! 就是一些简单的方法 基础的而已! 2018-4-22 15:50:26 继续py 还是py好玩感觉 ...