input 图片上传,转成 base64,点击复制

主要是为了实现图片转 base64 功能。

1、通过图片上传,使用 FileReader 读取文件,直接可获得 base64 字符串

2、通过 document.execCommand('copy'); 实现复制功能

 

/**
 * 图片转为 base64 字符串存储;(上传图片+复制base64字符串)
 */
export class ToBase64 {
    
    constructor() {
        // 添加 input
        this.addTarget();
    }

    /**
     * 添加必要元素
     */
    addTarget() {
        let ele = `
            <div class="warp">
                <div class="warp-content">点击上传</div>
                <input type="file" id="file"/>
            </div>
            <img src="" alt="" class="img" />
        `;
        let body = $('body');
        body.append(ele);
        let _self = this; // 保存当前对象引用
        let file = document.getElementById('file');
        let image = document.getElementsByClassName('img')[0];
        file.onchange = function () {
            // 获取到一个FileList对象中的第一个文件( File 对象),是我们上传的文件
            let fileData = this.files[0];
            let pettern = /^image/;

            console.info(fileData.type)

            if (!pettern.test(fileData.type)) {
                alert("图片格式不正确");
                return;
            }
            let reader = new FileReader();
            // 异步读取文件内容,结果用data:url的字符串形式表示
            reader.readAsDataURL(fileData);
            /*当读取操作成功完成时调用*/
            reader.onload = function (e) {
                console.log(e); //查看对象
                // 要的数据 这里的this指向FileReader()对象的实例reader
                console.log(this.result);
                image.setAttribute("src", this.result);

                // 将字符串打印在界面上
                let input = document.createElement('textarea');
                input.value = this.result;
                input.rows = 10;
                input.style.display = 'block';
                input.style.width = '80%';
                body.append(input);

                // 添加复制按钮
                let button = document.createElement('button');
                button.innerHTML = '点击复制';
                button.style.marginTop = '10px';
                button.addEventListener('click', function () {
                    // 选中,执行复制
                    input.select();
                    document.execCommand('copy');
                });
                body.append(button);
            }
        }
    }
}

 

上传前:

 

 上传后:

 

posted @ 2022-08-18 10:11  名字不好起啊  阅读(995)  评论(0编辑  收藏  举报