FileReader实例化:为何要先创建对象再进行文件读取?

filereader实例化:为何要先创建对象再进行文件读取?

读取文件的 io 操作为何要先实例化 filereader?

当使用 html 元素 filereader 实例,然后通过其方法来处理文件。那么问题来了,为什么不能直接将文件传递给 filereader 构造函数,但为什么要先创建一个实例,然后再做一些事情呢?

创建 filereader 实例的原因

filereader 实例化允许我们扩展文件处理逻辑。

例如,考虑以下代码:

const filereader = new filereader();filereader.readastext(file);filereader.addeventlistener('load', () => {  console.log(filereader.result);});

假设此后我们收到文件太大并且读取的反馈过程需要很长时间。在这种情况下,给定 filereader 实例,我们可以轻松添加事件处理程序来跟踪进度。

const filereader = new filereader();filereader.readastext(file);filereader.addeventlistener('load', () => {  console.log(filereader.result);});// Добавленоfilereader.addeventlistener('progress', (ev) => {  console.log(`Загружено ${ev.loaded} из ${ev.total}`);});

如果我们稍后需要添加中止下载按钮,我们可以再次使用 filereader 实例并调用 abort( ) 方法来中止读取过程。

const filereader = new filereader();filereader.readastext(file);filereader.addeventlistener('load', () => {  console.log(filereader.result);});// Добавленоfilereader.addeventlistener('progress', (ev) => {  console.log(`Загружено ${ev.loaded} из ${ev.total}`);});// Добавленоcancel.addeventlistener('click', () => {  filereader.abort();}, { once: true });

因此实例化 filereader 可以让我们更灵活地使用其方法,并允许我们做更多事情。

为什么我们不能传递一个文件直接传递给 filereader 构造函数?

在 java 等语言中,类构造函数可以采用参数来初始化对象。然而,在 javascript 中,创建类的实例,然后将参数传递给它来执行操作是很常见的。

有些人认为创建实例并随后立即调用方法可能会导致加载文件时出现混乱在构造函数中。将实例化与方法调用分开有助于避免歧义。

此外,将 filereader 与方法调用分开实例化可以允许重复使用它的一个实例,例如:

const input = document.getelementbyid('input');// Используем один экземплярconst filereader = new filereader();input.onchange = () => {  const file = input.files?.item(0);  if (!file) return;  filereader.readastext(file);  filereader.onload = () => {    console.log(filereader.result);  };};

这样我们减少创建的 filereader 实例的数量。

filereader 替代方案

有适合检索不同类型数据的 filereader 替代方案。让我们看一些示例:

文本:使用 file 对象的 text() 方法,例如:

const file = input.files?.item(0);const text = await file.text();

图片:FileReader实例化:为何要先创建对象再进行文件读取?标签创建临时url并显示图片,加载后释放url:

const file = input.files?.item(0);const blobURL = URL.createObjectURL(file);img.src = blobURL;img.addEventListener('load', () => {  URL.revokeObjectURL(blobURL);});

以上就是FileReader实例化:为何要先创建对象再进行文件读取?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1498111.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 20:10:17
下一篇 2025年12月19日 20:10:25

相关推荐

  • 通过示例快速学习 useActionState (Nextjs

    使用表单时,useactionstate 挂钩简化了捕获表单值并将其作为 formdata 传递到服务器操作的过程。 useactionstate 还通过使用服务器操作返回的值自动更新状态变量来管理状态。这对于渲染输入字段验证错误特别有帮助,如下面使用 zod 的示例所示。 form.tsx: “u…

    2025年12月19日
    000
  • HTTPS环境下a标签下载文件失败及接口调用下载是否需要代理?

    HTTPS 下使用 a 标签下载文件失败 问题: 为什么在 HTTPS 环境下使用 a 标签下载文件会出现失败的情况?在使用接口调用方式下载文件的场景中,是否可以省略代理转发步骤? 答案: 在 HTTPS 环境下使用 a 标签下载 HTTP 资源时,浏览器会将其视为不安全操作,并予以拦截。这是由于 …

    2025年12月19日
    000
  • JS 中的 CSS:样式组件、情感等的完整指南,以实现更清晰和可扩展的样式

    如果您曾经处理过复杂、庞大的 CSS 文件,或者在大型项目中努力保持样式有序,那么您一定会喜欢 JS 中的 CSS。这是因为,通过这种方法,您可以直接在 JavaScript 中编写 CSS,这使得样式模块化且灵活,使其完美适合 React 等基于组件的框架。 我们将深入研究两个最流行的 CSS-i…

    2025年12月19日
    000
  • innerHTML标签识别问题:为什么我的innerHTML无法识别“标签?

    innerhtml标签识别问题 在使用innerhtml标签时,您遇到无法识别语句的问题。以下探讨了原因和解决方案。 您提供的代码包含两句试图使用innerhtml添加内容到.chat_list元素中。然而,您注意到第一句没有正确识别标签。 原因在于您在 中添加了一个额外的空格。空格作为一个字符被i…

    2025年12月19日
    000
  • 使用 React Native 和 Hugging Face API 构建交互式儿童故事生成器

    在这篇文章中,我们将逐步构建一个 react native 应用程序,该应用程序使用 hugging face 强大的 ai 模型根据提示和年龄范围生成儿童故事。该应用程序允许用户输入提示,选择年龄范围,然后查看自定义故事以及总结故事的卡通图像。 特征 交互式故事生成:用户输入指导人工智能创建引人入…

    2025年12月19日
    000
  • HTTPS下A标签下载HTTP资源受限:为什么以及如何解决?

    https 下 a 标签下载文件受限 问题 1: 为什么在 https 网站中,通过 a 标签下载 http 资源时会失败,而通过代理转发或接口调用方式却可以? 答案: https 网站下载 http 资源被浏览器视为不安全,会被拦截。 问题 2: 是否可以在接口调用方式下取消代理转发,直接访问 h…

    2025年12月19日
    000
  • Vue无限滚动加载:为什么每次只加载50条数据?

    探究 vue 无限滚动加载中的数据加载限制 在探讨的 vue 无限滚动加载 demo 中,我们发现它每次只加载 50 条数据。有人不禁疑问,为什么没能实现加载 100 条数据呢? 为了理解这个问题,我们需要深入分析 demo 的代码。在 demo 中,以下这段代码定义了每次加载的数据数量: cons…

    2025年12月19日
    000
  • HTTPS环境下a标签下载HTTP资源失败怎么办?

    HTTP 与 HTTPS 下 a 标签下载故障 在访问使用 HTTPS 协议的网站时,尝试通过 a 标签下载来自 HTTP 协议的资源可能会失败。这是因为浏览器将此视为不安全的混合内容,并会拦截下载。 解决方案 此问题的解决方案是确保下载资源也使用 HTTPS 协议。如果无法做到,可以使用以下两种方…

    2025年12月19日
    000
  • 将用户数据存储在 localStorage 中安全吗?

    开发 web 应用程序时,经常需要在浏览器中存储用户数据以改善体验或保持状态持久性。但为此使用 localstorage 安全吗?让我们探讨风险、最佳实践和安全替代方案。 什么是本地存储?localstorage 是一个浏览器 api,允许您在客户端简单且持久地存储数据。与 sessionstora…

    2025年12月19日
    000
  • ElementUI 组件排序后删除按钮删除元素异常:为什么点击删除按钮会随机删除元素?

    ElementUI 组件排序后删除按钮删除元素异常:排查与解决 在使用 ElementUI 组件进行排序操作时,用户发现点击删除按钮会随机删除元素,尽管打印的传入下标是正确的。需要排查并解决这个问题。 可能的导致因素包括: index 变化:在排序后,组件的索引值会实时变化。因此,在点击删除按钮时,…

    2025年12月19日
    000
  • 具有默认响应式导航栏的 React/Tailwind 模板

    我只是对排除 App.test.js 和所有那些我不会在 React 项目中使用的默认文件感到恼火,而且除了来自 Tailwind UI 网站的免费版本的导航栏之外,我从未找到过好的导航栏,这不是我见过的最好的导航栏。考虑到这一点,我从头开始为任何 React 项目创建了一个模板。我删除了所有不必要…

    2025年12月19日
    000
  • Svelte 5 中的异步获取

    当你想在 svelte 中获取某些内容时,推荐的方法是将其放入 load 函数中。 我写了一篇关于异步获取的文章以及为什么这对于加载函数之外的工作很重要。 一般来说,当不涉及ssr时,您可以更好地控制竞争条件、错误处理和加载函数之外的实现。虽然我同意在大多数情况下您应该使用加载函数(使用 svelt…

    2025年12月19日
    000
  • 正则表达式匹配多行HTML文本时,为什么只能捕获到最后一行?

    从HTML片段提取文本:匹配多行的挑战 使用正则表达式从HTML片段中提取文本时,有时我们会遇到这样的问题:匹配值可能是多行的,但只能捕获到最后一行。导致这一问题的根源是什么呢? 具体来说,问题在于所使用的正则表达式包含一个模式,该模式以 (+) 量词结尾。这个量词表示该模式可以重复出现一次或多次。…

    2025年12月19日
    000
  • JavaScript 生成器:通过暂停功能增强您的代码!

    javascript 生成器非常酷。它们就像常规函数,但具有超能力。我最近经常使用它们,我不得不说,它们改变了我对代码中控制流的思考方式。 让我们从基础开始。生成器是一个可以暂停和恢复的函数。它使用 function* 语法和yield 关键字。这是一个简单的例子: function* countt…

    2025年12月19日
    000
  • 你需要像专业人士一样阅读科技文章

    在快节奏的技术世界中,并非您阅读的所有内容都是准确或公正的。并非您读到的所有内容都是由人类编写的! 细节可能存在微妙的错误,或者文章可能故意误导。让我们来看看一些可以帮助您阅读科技文章或任何媒体内容的技能。 1. 培养健康的怀疑态度 培养健康的怀疑态度至关重要。质疑大胆的主张,寻找支持证据,不要只看…

    2025年12月19日
    000
  • 修改原型prototype:便捷与风险并存,如何平衡?

    修改原型prototype的潜在风险 修改对象原型prototype的做法虽然便捷,但也存在潜在的风险。 回想一下 JavaScript 中字符串和数组的包含方法为何分别称为 includes() 而不是 contains() 以及 groupBy 作为静态方法的设计。原因在于,历史上曾有库(如 M…

    2025年12月19日
    000
  • 修改原型prototype:方便之下的兼容性陷阱?

    修改原型prototype的风险:向不兼容兼容性的深渊迈进 修改原型prototype是一种看似方便却暗藏隐患的JS黑魔法。当在String或Array等全系统性的内置对象中添加自定义方法时,您可能会觉得省去了在各个组件中引入方法的麻烦。 然而,这种偷懒的做法代价高昂。经验丰富的开发者早已深知其中潜…

    2025年12月19日
    000
  • ElementUI 排序后删除按钮异常:为什么点击删除按钮会随机删除元素?

    ElementUI 排序后删除按钮异常,排查与解决 ElementUI 的一个排序组件出现了异常现象:排序后点击删除按钮会随机删除元素。通过查看代码发现,点击时的下标是正确的,但在打印时却是错乱的。 可能原因: 该问题并非真正随机,而是由于排序后元素的索引发生了实时变化。因此,打印时的索引顺序与点击…

    2025年12月19日
    000
  • 为什么 JavaScript 无法获取硬件信息:安全与信任的博弈

    浏览器与硬件信息获取的信任困境 对于为什么 JS 无法获取用户电脑的硬件信息,普遍的解释是出于安全考虑。然而,一些用户提出了质疑:既然安装在用户电脑上的 CS 软件可以访问硬件信息,为什么 JS 不行?难道这些软件就不需要考虑安全吗? 实际上,这本质上是一个信任问题。当用户安装某款软件时,表明他们信…

    2025年12月19日
    000
  • Vite 项目打包后非根路径刷新出现 “Failed to load module script” 错误:如何解决?

    解题:Vite项目打包后在非根路径刷新页面出现的 Failed to load module script 错误 在 Vite 项目中,打包后部署到 Nginx 服务器时,在非根路径刷新页面可能会遇到 “Failed to load module script” 错误。 该错…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信