FileReader详解与实例---读取并显示图像文件

【解决方案】以文件流的形式,在Https链接下请求Http资源(图片,文件) 浏览器升级Https协议下,Https链接在请求http资源时,浏览器会自动把带http的url升级为以https前缀的url。把对http的请求,包装成对后端资源的请求,就可以正常在Https的链接下请求Http资源。本篇以图片为例,演示以文件流的形式,在Https的网站中,请求http域内的图片资源。无需SSL证书,无需配置Nginx,无需修改浏览器设置。#2Vue.jsdata&发送请求。导致原本域内的文件和图片无法正常访问。前端Vue2.0+ElementUi。#1Vue部分页面代码。... 阅读详情

我们曾经在《HTML5 中 File 对象初探》中,使用到了FileReader,在那篇文章中,它被用来将一个文件读取为二进制字符串,并通过 xhr 发送到后端形成交互。作为 File API 的一部分,FileReader 专门用于读取文件,根据 W3C 的定义,FileReader 接口 "提供一些读取文件的方法与一个包含读取结果的事件模型"

HTML5 --- FileReader

接下来,我们将逐一了解 FileReader 的方法与事件模型,并最终通过一个例子程序来应用 FireRead,在这个例子中,使用支持 FileReader 浏览器的用户将能够通过一个 file input 选择一个图像文件,并不经过后台将图像显示在页面中。下面的链接指向这个例子,值得注意的是,到目前为止,只有 Firefox 3.6+ 和 Chrome 6.0+ 实现了 FileReader 接口。

点此查看最终效果

在这之前的 web 应用程序中,实现这个效果的通常做法是将用户选择的图像文件传送至后端,后端对其进行存储,再将 URL 返回到前端,前端通过这个 URL 来显示图像。 FileReader 的突破在于使得 JavaScript 拥有了处理文件的能力,它可以异步地读取存储在用户电脑中的文件,这里所指的文件,对于 JavaScript 来说是一个 File 对象,FileReader 读取文件的全部方法皆依赖于此,对于 File 对象还不是很了解的话,请先阅读《HTML5 中 File 对象初探》,这是本文的基础。

1. 能力检测与创建实例

检测一个浏览器是否支持 FileReader 很容易做到,支持这一接口的浏览器有一个位于 window 对象下的 FileReader 构造函数,如果浏览器有这个构造函数,那么就可以 new 一个 FileReader 的实例来使用。

        if ( typeof FileReader === 'undefined' ) {
	        alert( " 您的浏览器未实现 FileReader 接口 " );
	} else {
                var reader = new FileReader();
	        // do sth.
	}

2. 方法

FileReader 的实例拥有 4 个方法,其中 3 个用以读取文件,另一个用来中断读取。下面的表格列出了这些方法以及他们的参数和功能,需要注意的是 ,无论读取成功或失败,方法并不会返回读取结果,这一结果存储在 result属性中。

方法名 参数 描述
abort none 中断读取
readAsBinaryString file 将文件读取为二进制码
readAsDataURL file 将文件读取为 DataURL
readAsText file, [encoding] 将文件读取为文本

readAsText: 该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。
readAsBinaryString: 这个方法在《HTML5 中 File 对象初探》中已经被使用过一次了,它将文件读取为二进制字符串,通常我们将它传送到后端,后端可以通过这段字符串存储文件。
readAsDataURL: 这是例子程序中用到的方法,该方法将文件读取为一段以 data: 开头的字符串,这段字符串的实质就是 Data URI,Data URI是一种将小文件直接嵌入文档的方案。这里的小文件通常是指图像与 html 等格式的文件。点击这里了解更多关于 Data URI 的知识

3. 事件

FileReader 包含了一套完整的事件模型,用于捕获读取文件时的状态,下面这个表格归纳了这些事件。

事件 描述
onabort 中断时触发
onerror 出错时触发
onload 文件读取成功完成时触发
onloadend 读取完成触发,无论成功或失败
onloadstart 读取开始时触发
onprogress 读取中

文件一旦开始读取,无论成功或失败,实例的 result 属性都会被填充。如果读取失败,则 result 的值为 null ,否则即是读取的结果,绝大多数的程序都会在成功读取文件的时候,抓取这个值。

	reader.onload = function () {
		this.result     // 读取结果
	}

4. 实例

了解了这些知识过后,我们来还原之前的示例。第一步,创建 html 部分,主要包括一个 input 和一个用来呈现结果的 div:

        <label>请选择一个图像文件:</label>
<input type="file" id="demo_input" />
<div id="demo_result">
          <!-- 这里用来显示读取结果 -->
    </div>

接下来获取节点,并处理浏览器兼容部分,对于未实现 FileReader 接口的浏览器将给出一个提示并禁用 input,否则监听 input 的 change 事件。

if ( typeof FileReader === 'undefined' ){
        result.innerHTML = "
<p class='warn'>抱歉,你的浏览器不支持 FileReader

";
        input.setAttribute( 'disabled','disabled' );
} else {
        input.addEventListener( 'change',readFile,false );
}

最后书写函数 readFile 的代码,当 file input 的 change 事件触发时,调用这个函数,首先获取到 file 对象,并通过 file 的 type 属性来检验文件类型,在这里,我们只允许选择图像类型的文件。然后创建一个 FileReader 实例,并且调用 readAsDataURL 方法读取文件,在实例的 load 事件中,获取到成功读取到的文件内容,并以插入一个 img 节点的方式,显示在页面中。

function readFile(){
        var file = this.files[0];
        if(!/image\/\w+/.test(file.type)){
                alert("请确保文件为图像类型");
                return false;
        }
        var reader = new FileReader();
        reader.readAsDataURL(file);
        reader.onload = function(e){
                result.innerHTML = '<img src="'+this.result+'" alt=""/>'
        }
}

参考资料:

Thanks: http://www.jsmix.com/blog/html5/file-reader.html
Allegro PCB设计实战:5分钟搞定DDR信号线的Match Group等长规则设置 本文详细介绍了在Allegro PCB设计中,如何快速为DDR信号线设置Match Group等长规则。通过实战演练,解析了从理解相对传输延迟原理、在规则管理器中创建Match Group,到设置合理容差和利用动态绕线指示的全流程,帮助工程师在5分钟内高效完成高速信号时序约束,提升设计可靠性效率。 阅读详情

相关推荐

L2tp环境搭建笔记- Openwrt平台

本文使用3台openwrt设备, 分别搭建L2TP服务和2个客户端, 进行端到端验证和局域网组网,分析搭建过程中涉及的默认路由( defaultroute) 配置问题。

十年通信老兵的技术修炼之路——从3G到5G,从地面基站到卫星通信。 3342

FileReader

FileReader

m0_46641774的博客 1万+

gasturb.zip_Python_

gas turbines power cycle

FileReader上传文件

  FileReader对象允许web应用程序异步读取存储在计算机上的文件的内容,使用File或Bolb对象指定要读取的文件或数据。其中File对象可以是来自用户在一个<input>元素上选择文件后返回的FileList对象,也可以是来自拖放操作生成的DataTransfer对象,还可以是来自在一个HTMLCanvasElement上执行的mozGetAsFile()方法后返...

weixin_30861459的博客 1019

使用 FileReader进行文件读取

使用 FileReader进行文件读取

zyf971020的博客 8232

FileReader详解

我在Google Chrome Web Store上发布了一个案例hahaOCR,该扩展程序可以帮助用户识别出图片中的文字信息,以文本形式显示,大家可以在chrome网上应用商店中找到我发布的应用程序,如图所示: 图1 - hahaOCR 该扩展程序支持用户通过文件上传按钮上传图片,请看演示效果: 图2 - 测试图片 图3 - 测试效果 接下来,我们将在本文中详细讲解该案例所涉及的文件(图片)处理模块。 参考资料 MDN Web Docs:https://developer.mozilla.o

石璞东 7759

HTML5 FileReader详解实例---读取显示图像文件

我们曾经在《HTML5File 对象初探》中,使用到了FileReader,在那篇文章中,它被用来将一个文件读取为二进制字符串,通过 xhr 发送到后端形成交互。作为 File API 的一部分,FileReader 专门用于读取文件,根据 W3C 的定义,FileReader 接口 "提供一些读取文件的方法一个包含读取结果的事件模型"。 接下来,我们将逐一了解 Fil

sure_viola的专栏 4592

转:FileReader详解实例---读取显示图像文件

~~~针对需要读取本地图像,立即显示浏览器的情况,由于chrome firefox出于安全限制,input file不返回文件的真实路径,经测试IE6/7/8都会返回真实路径,所以chrome, firefox无法直接将图像显示在页面上,这里刚好可以用到 FileReader这个东东 我们曾经在《HTML5File 对象初探》中,使用到了FileReader,在那篇文章中,...

dayanwu2842的博客 182

FileReader详解实例---读取显示图像文件 | JS Mix

FileReader详解实例---读取显示图像文件 | JS Mix.

IFEIXIANG 436

FileReader()读取文件、图片上传预览

本文详细介绍了HTML5 FileReader API的使用方法,重点讲解了图片上传预览功能的实现。主要内容包括:FileReader API的核心特性(异步读取、多种数据格式支持)和浏览器兼容性;基础使用方法(创建实例、四种读取方法、事件处理);完整的图片上传预览实现代码(支持拖放、多文件选择、预览和删除);高级功能如图片压缩、进度显示和分片读取;以及常见问题的解决方案。通过本文,开发者可以掌握如何利用FileReader API构建功能完善、用户体验良好的文件上传组件。

油墨香^-^的博客 3643

【JS】前端文件读取FileReader操作总结

FileReaderJavaScript 中的一个 Web API,它允许 web 应用程序异步读取用户计算机上的文件(或原始数据缓冲区)的内容,例如读取文件以获取其内容,在不将文件发送到服务器的情况下在客户端使用它。这对于处理图片、文本文件等非常有用,尤其是当你想要在用户界面中即时显示文件内容或进行文件预览时。

程序员-张师傅 3885

Js的FileReader相关操作

Js的FileReader相关介绍

qq_60440599的博客 2516

python保存data到txt_【python】读取和输出到txt

读取txt的数据和把数据保存到txt中是经常要用到的,下面我就总结一下。读txt文件python常用的读取文件函数有三种read()、readline()、readlines()以读取上述txt为例,我们一起来看一下三者的区别read() 一次性读全部内容read() #一次性读取文本中全部的内容,以字符串的形式返回结果with open("test.txt", "r") as f: #...

weixin_39661345的博客 1785

FileReader的几种常用用法

FileReaderJavaScript 中用于读取文件内容的对象,它提供了多种方法来读取不同类型的文件数据。以下是 FileReader 的一些常用场景: 1. 读取文本文件 function readTextFile(file) { const reader = new FileReader(); reader.onload = function(event) { const text = event.target.result; console.log(text);

weixin_49274461的博客 1771
上一篇: 向html page中路径传值得值的方法
下一篇: 给力的 Google HTML5 训练营(HTML5 Drag&Drop 拖拽、FileReader实例教程)
大大超超
博客等级 码龄15年 39粉丝 88原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值