• img显示文件对象


    首先这个图片文件对象从哪里来?

    1 通过input 标签

    <input type="flile" multiple id="filelist">
    var files = document.getElementById("fb").files; // js 获取文件对象

    2.通过 drag 和drop

    dragbox.addEventListener("drop", drop, false);
    function drop(e) {
        e.stopPropagation();
        e.preventDefault();
        var dt = e.dataTransfer;
        var files = dt.files; //文件对象
        handFiles(files);
    }

    3.通过xmlHttpRequest请求

    function init() {
        //$ajax("/ashx/handle.ashx", "post", "", function (data) { alert(data); });
        $ajax("/static/0101-01.png", "get", "", function (data) { alert(data); });
    }
    
    function $ajax(url,method,data,callback) {
        xhr = new XMLHttpRequest();  // XMLHttpRequest 对象
        xhr.open(method, url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
        xhr.responseType = "blob";//接收的数据类型
        xhr.onload = reqListener; //请求完成
        xhr.send(data); //开始上传,发送form数据
    }
    function reqListener() {
        console.log(this.response);
        var blob = this.response;//文件对象
        
    }

    好了,文件对象取到了,那么该如何显示在html中呢

    1.使用 FileReader

        var dragbox = document.querySelector("#dragbox");
        for (var i = 0; i < files.length; i++) {
            var file = files[i];
            var imageType = /^image//;
            if (!imageType.test(file.type)) {
                continue;
            }
            var img = document.createElement("img");
            img.classList.add("obj");
            img.file = file;
            dragbox.appendChild(img);
    
            var reader = new FileReader();
            reader.onload = (function (aImg) {
                return function (e) {
                    aImg.src = e.target.result;
                }
            })(img);
            reader.readAsDataURL(file);
        }

    2 使用window.URL.createObjectURL();

        var blob = files[0];
        var body = document.querySelector("body");
        var img = document.createElement("img");
        img.src = window.URL.createObjectURL(blob);
        img.onload = function (e) {
            window.URL.revokeObjectURL(img.src);
        };

    这两种都能将图片文件在html 中显示出来,但img标签的src 属性值却是不一样的,FileReader 中src属性值是一长串base64位编码;window.URL.createObjectURL()的src属性值为:blob:http://localhost:24706/dfe67478-661f-4e9e-91d3-d75d668f9f57 。 以blob开头的地址。以window.URL.createObjectURL()这种方式每次 需要使用revokeObjectURL释放URL对象。

  • 相关阅读:
    区块链技术基础
    理解数字货币
    MySQL-插入更新 ON DUPLICATE KEY UPDATE
    Flume-Failover Sink Processor 故障转移与 Load balancing Sink 负载均衡
    Flume-Replicating Channel Selector 单数据源多出口
    Flume-几种拓扑结构
    Flume-事务与传输流程
    Java-JPDA 概述
    Navicat Premium
    Flume-Taildir Source 监控目录下多个文件的追加
  • 原文地址:https://www.cnblogs.com/wsz168/p/8404970.html
Copyright © 2020-2023  润新知