使用FileReader对象的readAsDataURL方法来读取图像文件

readAsDataURL方法会使用base-64进行编码,编码的资料由data字串开始,后面跟随的是MIME type,然后再加上base64字串,逗号之后就是编码过的图像文件的内容。

readAsDataURL获取的base64字符串如下:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAB0CAYAAABUmhYnAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAA......

使用Img显示图像文件

若想要将读取出来的图像文件,直接显示在网页上,您可以透过JavaScript建立一个标签,再设定src属性为Data URL,再将<img>标签加入DOM之中,
例如以下范例所示:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script type="text/javascript">
        function ProcessFile(e) {
            var file = document.getElementById('file').files[0];
            if (file) {
                var reader = new FileReader();
                reader.onload = function (event) {
                    var txt = event.target.result;

                    var img = document.createElement("img");
                    img.src = txt;//将图片base64字符串赋值给img的src
                    document.getElementById("result").appendChild(img);
                };
            }
            reader.readAsDataURL(file);
        }

        function contentLoaded() {
            document.getElementById('file').addEventListener('change',
                ProcessFile, false);
        }

        window.addEventListener("DOMContentLoaded", contentLoaded, false);
    </script>
</head>
<body>
请选取一个图像文件: <input type="file" id="file" name="file"/>
<div id="result"></div>
</body>
</html>

参考:

使用FileReader对象的readAsDataURL方法来读取图像文件

FileReader用来把文件读入内存,并且读取文件中的数据。FileReader接口提供了一个异步API,使用该API可以在浏览器主线程中异步访问文件系统,读取文件中的数据。

FileReader 的 result 可以有 3 种形式, 它取决于具体调用读取的方法
调用 reader. readAsArrayBuffer, 则 result 为 ArrayBuffer 对象
调用 reader. readAsText, 则 result 为 字符串
调用reader. readAsDataURL, 则 result 为 DataURL, DataURL 可直接 赋值给 img.src
调试发现 DataURL 是带头信息(/image) 的 base64(可能是) 编码的字符串

FileReader接口的使用示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script type="text/javascript">
    var result = document.getElementById("result");
    var file = document.getElementById("file");

    //判断浏览器是否支持FileReader接口
    if (typeof FileReader == 'undefined') {
        result.InnerHTML = "<p>你的浏览器不支持FileReader接口!</p>";
        //使选择控件不可操作
        file.setAttribute("disabled", "disabled");
    }

    function readAsDataURL() {
        //检验是否为图像文件
        var file = document.getElementById("file").files[0];
        if (!/image\/\w+/.test(file.type)) {
            alert("看清楚,这个需要图片!");
            return false;
        }
        var reader = new FileReader();
        //将文件以Data URL形式读入页面
        reader.readAsDataURL(file);

        reader.onload = function (e) {
            var result = document.getElementById("result");
            //显示文件
            result.innerHTML = '<img src="' + this.result + '" alt="" />';
        }
    }

    function readAsBinaryString() {
        var file = document.getElementById("file").files[0];
        var reader = new FileReader();
        //将文件以二进制形式读入页面
        reader.readAsBinaryString(file);

        reader.onload = function (f) {
            var result = document.getElementById("result");
            //显示文件
            result.innerHTML = this.result;
        }
    }

    function readAsText() {
        var file = document.getElementById("file").files[0];
        var reader = new FileReader();
        //将文件以文本形式读入页面
        reader.readAsText(file);

        reader.onload = function (f) {
            var result = document.getElementById("result");
            //显示文件
            result.innerHTML = this.result;
        }
    }
</script>
<p>
    <label>请选择一个文件:</label>
    <input type="file" id="file"/>
    <input type="button" value="读取图像" onclick="readAsDataURL()"/>
    <input type="button" value="读取二进制数据" onclick="readAsBinaryString()"/>
    <input type="button" value="读取文本文件" onclick="readAsText()"/>
</p>
<div id="result" name="result"></div>
</body>
</html>

参考:

HTML5学习之FileReader接口

  • 18
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
readAsDataURL方法JavaScript中用于读取文件数据的一种方法。它可以将文件内容转换为Base64编码的数据URL,以便用于展示图像或其他媒体。 readAsDataURL方法并不会获取文件的大小。如果您想要获取文件的大小,可以使用另外一个方法:File对象的size属性。size属性会返回以字节为单位的文件大小。 以下是一个示例代码,展示如何使用readAsDataURL方法读取文件并获取文件大小: ```javascript // HTML文件中需要一个input标签,用于上传文件 <input type="file" id="myFile"> // JavaScript代码 const fileInput = document.getElementById('myFile'); fileInput.addEventListener('change', (event) => { const file = event.target.files[0]; console.log(`文件大小:${file.size} 字节`); const fileReader = new FileReader(); fileReader.addEventListener('load', (event) => { const dataURL = event.target.result; console.log(`DataURL: ${dataURL}`); }); fileReader.readAsDataURL(file); }); ``` 以上代码中,我们首先通过事件监听器获取用户上传的文件对象。然后我们可以通过文件对象的size属性获取文件大小,并将其打印在控制台中。接下来,我们创建了一个FileReader对象,并通过readAsDataURL方法读取文件内容并将其转换为数据URL。最后,我们将数据URL打印在控制台中。 请注意,文件的大小是指文件的实际字节数,而读取文件内容并转换为数据URL后的数据大小会比文件本身稍大一些。因为数据URL包含了一些额外的信息,如MIME类型和编码信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值