• 原生 js 实现选择图片后本地预览


    在web 编程里有时候会需要这样的功能,在 file 控件里选择图片后需要实时预览,而不用上传到服务器。可以用 URL.createObjectURL() 函数实现。

    URL.createObjectURL() 静态方法会创建一个 DOMString,其中包含一个表示参数中给出的对象的URL。这个 URL 的生命周期和创建它的窗口中的 document 绑定。这个新的URL 对象表示指定的 File 对象或 Blob 对象。

    createObjectURL 使用方法

    objectURL = URL.createObjectURL(object);
    

    参数 object 用于创建 URL 的 File 对象、Blob 对象或者 MediaSource 对象。

    浏览器兼容

    createObjectURL 浏览器兼容

    createObjectURL应用实例

    创建一个ID为 avatar 的 file input 控件和ID为 avatar-preview 的 img 图像占位空间。

    <input type="file" id="avatar">
    <img id="avatar-preview" src=""> 
    

    js 脚本:

    function readFile() {
        if (this.files && this.files[0]) {
            var URL = window.URL || window.webkitURL;
            var file = this.files[0];
            var image = new Image();
    
            image.onload = function() {
                if (this.width) {
                    var FR= new FileReader();
                    FR.addEventListener("load", function(e) {
                        var buffer = e.target.result;
                        document.getElementById("avatar-preview").src = buffer;
                    });
                    FR.readAsDataURL(file);
                }
            };
            image.onerror = function() {
                // 选择的文件不是图片格式
            };
    
            image.src = URL.createObjectURL(file);
        }
    }
    
    document.getElementById("avatar").addEventListener("change", readFile);
    

    这不是最简洁模式,考虑到实际使用,添加了几个小功能,如:

    URL 的浏览器兼容

    var URL = window.URL || window.webkitURL;
    

    是否是图片文件 image.onerror、图片像素大小判断 this.width

    功能扩展

    如果要添加更多功能,比如要对图片长宽限制、对图片大小限制,可以通过获取被选择文件的信息来判断,被选取文件是一个 File 对象。具有下面三个属性:

    • name 文件名称,只读字符串。只包含文件名,不包含任何路径信息。
    • size 文件大小,按字节数(bytes)计算,只读的64位整数。
    • type 文件的MIME类型,只读字符串,当类型不能确定时为""。

    有些时候通过 type 来获取文件类型是不正确的,如果仅是识别图像文件,使用上面js 代码里的 image.onerror 函数处理更靠谱。

    这是我在网页里使用的通过 js 实现图片本地预览的功能,希望对你也有帮助。

    https://pylist.com/t/1571709441

  • 相关阅读:
    0.1.3 set的用法
    JoinPoint
    砝码组合(dfs)
    强大的【环绕通知】
    applicationContext.xml 模板
    各种jar包
    装饰博客(二)添加宠物
    装饰博客(一)添加背景图片
    拖拽功能的实现
    点击之后连接qq
  • 原文地址:https://www.cnblogs.com/7qin/p/13622246.html
Copyright © 2020-2023  润新知