File API以及相关概念

一、Blob

  Blob 对象表示一个不可变、原始数据的类文件对象。它的数据可以按文本或二进制的格式进行读取,也可以转换成 ​ReadableStream
 来用于数据操作。

构造方法

new Blob(blobParts)

new Blob(blobParts,options)

  • blobParts是一个可迭代对象(就是能循环的) ,比如数组。
  • options一个可以指定type(文件类型)的对象。
示例
// 一个包含单个字符串的数组
const blobParts = ['<q id="a"><span id="b">hey!</span></q>']; 
// 得到 blob
const blob = new Blob(blobParts, { type: "text/html" }); 

实例属性

  • size:Blob对象中所包含数据的大小字节
  • type:一个字符串,表明该Blob对象所包含数据的MIME类型。如果类型未知,则该值为空字符串

实例方法

1、arrayBuffer():用于将 Blob 对象转换为 ArrayBuffer 对象。

let blob = new Blob(['Hello World'], {type: 'text/plain'});
blob.arrayBuffer().then(arrayBuffer => {
  let text = new TextDecoder().decode(arrayBuffer);
  console.log(text); // 输出: Hello World
});
 

2、slice():分割Blob对象

slice()

slice(start)

slice(start, end)

slice(start, end, contentType)

示例: 假设有一个名为 file 的 File 对象,代表一个名为 example.txt 的文本文件。

let slicedFile = file.slice(0, 100, "text/plain");
console.log(slicedFile); // 输出 Blob 对象

// 使用 FileReader 读取子文件内容
let reader = new FileReader();
reader.onload = function(event) {
  let slicedContent = event.target.result;
  console.log(slicedContent); // 输出子文件的内容
};
reader.readAsText(slicedFile);
 

3.stream():返回一个ReadableStream对象,读取它将返回包含在 Blob 中的数据。

function blobToStream(blob) {
  const stream = new ReadableStream({
    start(controller) {
      const reader = new FileReader();

      reader.onload = function() {
        controller.enqueue(new Uint8Array(reader.result));
        controller.close();
      };

      reader.readAsArrayBuffer(blob);
    }
  });

  return stream;
}

const blob = new Blob(["Hello, world!"], { type: "text/plain" });
const stream = blobToStream(blob);
 

4.text():返回一个promise

// 创建一个 Blob 对象
const blob = new Blob(["Hello, world!"], { type: "text/plain" });

// 使用 text() 方法读取 Blob 对象的文本内容
blob.text()
  .then(text => {
    console.log(text); // 输出: "Hello, world!"
  })
  .catch(error => {
    console.error(error); // 输出解析错误的错误信息
  });
 

二、File

    File对象通常从用户使用<input>元素选择文件返回的FileList对象中检索,或者从拖放操作返回的DataTransfer对象中检索。File对象是一种特定类型的Blob(继承)。

构造方法

new File(fileBits, fileName)

new File(fileBits, fileName, options)

  • fileBits:一个可迭代对象;
  • fileName:文件名或文件路径的字符串;
  • options:type(文件类型)和lastModified(最后一次修改时间)

实例属性

  • lastModified:返回文件的最后修改时间;
  • lastModifiedDate:返回File对象引用的文件的最后修改时间的Data
  • name:文件名
  • webkitRelativePath:返回File对象相对于URL的路径

实例方法

    同Blob

三、FileList

    FileList接口表示由HTML<input>元素的files属性返回的该类型的对象,示例:

HTML

<input id="myfiles" multiple type="file" />
<pre class="output">选定的文件:</pre>

JS 

const output = document.querySelector(".output");
const fileInput = document.querySelector("#myfiles");

fileInput.addEventListener("change", () => {
  for (const file of fileInput.files) {
    output.innerText += `\n${file.name}`;
  }
});

注意:input标签中的multiple的作用是文件多选,如果只支持但文件上传,则可以取files[0]。 

四、FileReader

    FileReader接口允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用File或Blob对象指定要读取的文件或数据。文件对象可以从用户使用的<input>元素选择文件而返回的fileList对象中获取,或者从拖放操作的DataTransfer对象中获取。

构造方法

new fileReader()

实例属性

  • error:表示在读取文件时发生的错误;
  • readyState:表示FileReader状态的数字,取值为0(EMPTY-还没有加载任何数据)、1(LOADING-数据正在被加载)、2(DONE-已完成全部的读取请求);
  • result:文件的内容(字符串或ArrayBuffer对象)

实例方法

  • abort():中止读取操作,在返回时,readyState属性为DOME;
  • readAsArrayBuffer():传入一个Blob对象,读取后result中包含一个ArrayBuffer对象。
  • readAsBinaryString():传入一个Blob对象,读取后result中包含一个原始二进制数据的字符串。
  • readAsDataURL():传入一个Blob对象,读取后result中包含一个图片路径(可以做图片的预览src的值)。
  • readAsText():可以只传入Blob,也可以传入Blob和一个数据的编码的字符串,返回一段文本。

事件

  • abort:当读取被中止时触发;
  • error:当读取由于错误而失败时触发;
  • load:读取成功完成时触发;
  • loadend:读取完成时触发,无论成功与否;
  • loadstart:读取开始时触发;
  • progress:读取数据时定期触发;

常用方法实例:

function printFile(file) {
  const reader = new FileReader();
  reader.onload = (evt) => {
    console.log(evt.target.result);
  };
  reader.readAsText(file);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/714030.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

001 Spring介绍

文章目录 特点1.方便解耦&#xff0c;简化开发2.AOP编程的支持3.声明式事务的支持4.方便程序的测试5.方便集成各种优秀框架6.降低Java EE API的使用难度7.Java源码是经典学习范例 好处什么是耦合和内聚耦合性&#xff0c;也叫耦合度&#xff0c;是对模块间关联程度的度量内聚标…

如何学习VBA_3.3.3:VBA对于工作簿、工作表的一般操作

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的劳动效率&#xff0c;而且可以提高数据处理的准确度。我推出的VBA系列教程共九套和一部VBA汉英手册&#xff0c;现在已经全部完成&#xff0c;希望大家利用、学习。 如果…

嵌入式微处理器重点学习(三)

堆栈操作 R1=0x005 R3=0x004 SP=0x80014 STMFD sp!, {r1, r3} 指令STMFD sp!, {r1, r3}是一条ARM架构中的存储多个寄存器到内存的指令,这里用于将r1和r3寄存器的内容存储到栈上。STMFD(Store Multiple Full Descending)是一种全递减模式的多寄存器存储指令,它会先将栈指针…

【MATLAB】语法

MATLAB 基本语法(%{和%}) 赋值 函数名值&#xff1b;for for i1:10循环语句 end//while x0; sum0; while x<100sumsumx;x; end//if if x > 1f x^2 1; elsef 2 * x endswitch onum input(请输入一个数); switch num case -1 //注意case后面没有冒号disp(I am…

大数据与人工智能在保险行业数字化转型中的应用

随着科技的快速发展&#xff0c;大数据和人工智能&#xff08;AI&#xff09;技术在保险行业中扮演着越来越重要的角色&#xff0c;推动了保险行业的数字化转型。通过收集和分析海量的用户数据&#xff0c;利用先进的人工智能算法&#xff0c;保险公司能够更准确地评估风险&…

7z压缩文件解压缩遇到文件末端错误

错误如上。我是之前使用7zip压缩软件压缩本地视频为7z格式&#xff0c;然后将压缩包上传到阿里云盘。今天通过阿里云盘下载这个文件&#xff0c;结果使用7zip解压压缩软件 解压缩这个文件遇到“文件末端错误”&#xff0c;然后在网上找了一圈也没有找到解决办法。 我用winrar解…

window11 系统更新失败处理办法

方法一&#xff1a;运行 Windows 更新疑难解答 按 Win I 打开设置。选择“系统”。选择“疑难解答”&#xff0c;然后点击“其他疑难解答”。找到“Windows 更新”&#xff0c;并运行疑难解答。 方法二&#xff1a;使用 DISM 工具修复系统文件 在开始菜单中搜索“命令提示符…

Perplexity AI — 探索网络,发掘知识,沟通思想

体验地址&#xff1a;Perplexity AI &#xff08;国外网站访问需要梯子&#xff09; Perplexity AI是一款功能强大的人工智能搜索引擎&#xff0c;其特点和优势主要体现在以下几个方面&#xff1a; 功能&#xff1a; 自然语言搜索&#xff1a;Perplexity AI可以理解用户的自然…

【AI实践】Dify调用本地和在线模型服务

背景 Ollama可以本地部署模型&#xff0c;如何集成私有数据、如何外部应用程序对接&#xff0c;因此需要有一个应用开发框架 Dify功能介绍 欢迎使用 Dify | 中文 | Dify 下文将把dify部署在PC上&#xff0c;windows环境&#xff1b; 安装部署 安装dify及docker jacobJacobs…

Jira,一个强大灵活的项目和任务管理工具 Python 库

目录 01初识 Jira 为什么选择 Jira? 02安装与配置 安装 jira 库 配置 Jira 访问 获取 API token: 配置 Python 环境: 03基本操作 创建项目 创建任务 查询任务 更新任务 删除任务 04高级操作 处理子任务 搜索任务 添加附件 评论任务 05实战案例 自动化创建…

消息队列-概述-JMS和AMQP

JMS和AMQP JMS是什么 JMS&#xff08;JAVA Message Service,java 消息服务&#xff09;是 Java 的消息服务&#xff0c;JMS 的客户端之间可以通过 JMS 服务进行异步的消息传输。JMS&#xff08;JAVA Message Service&#xff0c;Java 消息服务&#xff09;API 是一个消息服务…

消息队列-概述-什么是消息队列

什么是消息队列 我们可以把消息队列看作是一个存放消息的容器&#xff0c;当我们需要使用消息的时候&#xff0c;直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构&#xff0c;所以消费消息时也是按照顺序来消费的。 参与消息传递的双方称为 生产…

emoji_call_read

这道题我觉得可以记录一下。 主要函数&#xff0c;一样&#xff0c;先考虑怎么泄露libc基址。 但&#xff0c;0x20实在太小&#xff0c;组成不了连续3个ret syscall。 而且文件中也没pop rdi;ret这个gadget&#xff0c;只能另寻他法。 我们注意到&#xff1a; main函数中的这…

证照之星 XE版软件怎么下载安装? 【详细安装图文教程】

软件简介&#xff1a; 证照之星是国内顶级的证件照片制作软件&#xff0c;具有一键裁剪&#xff0c; 智能背景替换&#xff0c;批量制作、内置证照规格的四大优势。同时两大独创技术&#xff1a;智能去除皮肤油光、证照服装替换。同时支持联机拍摄&#xff1a;支持网络摄像头及…

Python时间序列分析库

Sktime Welcome to sktime — sktime documentation 用于ML/AI和时间序列的统一API,用于模型构建、拟合、应用和验证支持各种学习任务,包括预测、时间序列分类、回归、聚类。复合模型构建,包括具有转换、集成、调整和精简功能的管道scikit学习式界面约定的交互式用户体验Pro…

【字符串】65. 有效数字

本文涉及知识点 字符串 LeetCode65. 有效数字 给定一个字符串 s &#xff0c;返回 s 是否是一个 有效数字。 例如&#xff0c;下面的都是有效数字&#xff1a;“2”, “0089”, “-0.1”, “3.14”, “4.”, “-.9”, “2e10”, “-90E3”, “3e7”, “6e-1”, “53.5e93”,…

LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS

文章汇总 总体来看像是一种带权重的残差&#xff0c;但解决的如何高效问题的事情。 相比模型的全微调&#xff0c;作者提出固定预训练模型参数不变&#xff0c;在原本权重矩阵旁路添加低秩矩阵的乘积作为可训练参数&#xff0c;用以模拟参数的变化量。 模型架构 h W 0 x △…

【Linux】 进程信号的发生

送给大家一句话&#xff1a; 何必向不值得的人证明什么&#xff0c;生活得更好&#xff0c;乃是为你自己。 -- 亦舒 进程信号的发生 1 何为信号2 信号概念的基础储备3 信号产生kill系统调用alarm系统调用异常core term Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢…

8086汇编 add指令学习

ADD&#xff0c;是Intel x86平台的汇编加法指令&#xff0c;MEM代指操作数为内存或寄存器&#xff0c;REG代指操作数为寄存器&#xff0c;IMM代指立即数&#xff0c;SEG代指操作数为段寄存器。 形式和示例如下&#xff1b; ADD MEM8,REG8 ADD DS:[BXSI],AL ADD MEM16,R…

20240615在WIN11下的串口调试助手的下载安装以及使用

20240615在WIN11下的串口调试助手的下载安装以及使用 2024/6/15 18:06 百度&#xff1a;串口调试助手 blob:https://apps.microsoft.com/df934d29-fd7a-4873-bb6b-a4ab5a7934c9 串口调试助手 Installer.exe 收发的LOG&#xff1a; rootok3588:/# ./uart_test /dev/ttyS0 11520…