zoukankan      html  css  js  c++  java
  • xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!

    Base 64 & URL & blob & FileReader & createObjectURL

    
    
    /**
     * let blob = item.getAsFile();
     * let reader = new FileReader();
     * event.target.result ===  reader.result
     * base 64
     * 
     */
    
    // data:image/jpeg;base64,
    // data:image/png;base64,
    
    /**
     * let blob = item.getAsFile();
     * let url = window.URL.createObjectURL(blob);
     * blob url
     * 
     */
    
    // blob:null/2bc6b76b-7293-458d-bc8c-9d242e94a18e
    
    let textarea = document.querySelector(`[data-box="box-textarea"]`);
    let box = document.querySelector(`[data-input="text"]`);
    
    box.addEventListener("paste", function(event) {
        let items = (event.clipboardData || event.originalEvent.clipboardData).items;
        console.log(`clipboardData items: `, JSON.stringify(items, null, 4));
        // will give you the mime types
        for (const item of items) {
            // let item = items[i];
            if (item.kind === "file") {
                // let blob = item.getAsFile();
                // let url = window.URL.createObjectURL(blob);
                let blob = item.getAsFile();
                let reader = new FileReader();
                reader.onload = function(event) {
                    console.log(`event.target.result =`, event.target.result);
                    // data:image/png;base64,
                    let img = document.createElement(`img`);
                    img.src = event.target.result;
                    img.setAttribute(`class`, `clearfix`);
                    // img.class = ".clearfix";
                    // img.class = "clearfix";
                    img.style = " 30%; height: 30%;";
                    // img.style = " 200px; height: 100px;";
                    // textarea.appendChild(img);
                    // textarea.insertAdjacentElement(`beforeend`, img);
                    textarea.insertAdjacentElement(`afterend`, img);
                };
                // data url
                reader.readAsDataURL(blob);
            }
        }
    });
    
    

    demos

    blob & URL

    https://codepen.io/xgqfrms/full/OeVQzY

    let log = console.log;
    
    let blob = item.getAsFile();
    log(`blob =`, blob);
    
    let url = window.URL.createObjectURL(blob);
    log(`url =`, url);
    
    
    let img = document.createElement(`img`);
    // img.src = event.target.result;
    img.src = url;
    img.setAttribute(`class`, `clearfix`);
     img.style = " 30%; height: 30%;";
    log(`img =`, img);
    // textarea.insertAdjacentElement(`afterend`, img);
    
    

    base 64 & URL

    https://codepen.io/xgqfrms/full/EBjQRw

    let log = console.log;
    
    let blob = item.getAsFile();
    log(`blob =`, blob);
    
    let url = window.URL.createObjectURL(blob);
    log(`url =`, url);
    
    
    let img = document.createElement(`img`);
    // img.src = url;
    // img.src = event.target.result;
    img.src = reader.result;
    img.setAttribute(`class`, `clearfix`);
     img.style = " 30%; height: 30%;";
    log(`img =`, img);
    // textarea.insertAdjacentElement(`afterend`, img);
    
    

    js clipboardData solution

    1. e.clipboardData.items[0].getAsFile() === blob
    2. e.clipboardData.items[1].getAsFile() === base 64
    
    
    // 单聊贴图发送
    let box = document.querySelector(`[data-input="text"]`);
    box.addEventListener("paste", function (e) {
        if (e.clipboardData && e.clipboardData.types) {
            if (e.clipboardData.items.length > 0) {
                if (/^image/w+$/.test(e.clipboardData.items[0].type) || /^image/w+$/.test(e.clipboardData.items[1].type)) {
                    let blob = e.clipboardData.items[0].getAsFile() || e.clipboardData.items[1].getAsFile();
                    let url = window.URL.createObjectURL(blob);
                    privewImage(url);
                    // blob:null/2bc6b76b-7293-458d-bc8c-9d242e94a18e
                    let uid = conn.getUniqueId();
                    // 生成本地消息id
                    let msg = new WebIM.message("img", uid);
                    // 创建图片 img 消息
                    msg.set({
                        apiUrl: WebIM.config.apiURL,
                        file: {
                            data: blob,
                            url: url,
                        },
                        to: "test",
                        // to: "root",
                        // 接收消息对象
                        roomType: false,
                        // 单聊
                        onFileUploadError(err) {
                            log("Image Upload Error", err);
                        },
                        onFileUploadComplete(data) {
                            log("Image Upload Complete", data);
                        },
                        success(id) {
                            log("Image Upload Success", id);
                            alert(`图片发送成功!`);
                        },
                    });
                    conn.send(msg.body);
                }
            }
        }
    });
    

    testing

    https://codepen.io/xgqfrms/pen/ydNvaY

    https://codepen.io/xgqfrms/pen/MMwQOe


  • 相关阅读:
    每日一练之动态算法
    001之IP基础对话框
    mysql的一些操作
    logcat 提示 Unable to open log device '/dev/log/main': No such file or directory
    之前接触过的测试的相关工具
    SAP内存、ABAP内存
    模块化程序—函数 function
    模块化程序-子例程
    模块化程序-宏
    传输请求的管理
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/11016097.html
Copyright © 2011-2022 走看看