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.mzph.cn/pingmian/28197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习:PyCharm中运行Bash脚本

GitHub上的开源代码有很多是用 Bash 脚本来自动化数据处理、模型训练和模型评估等任务的&#xff0c;如何使用PyCharm来运行Bash脚本&#xff0c;从而快速上手GitHub开源代码&#xff0c;是一个实用的技巧&#xff0c;本文主要介绍PyCharm中运行Bash脚本的方法。 PyCharm 是一个…

「实战应用」如何用图表控件LightningChart JS创建SQL仪表板应用(二)

LightningChart JS是Web上性能特高的图表库&#xff0c;具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用&#xff0c;从而实现高刷新率和流畅的动画&#xff0c;常用于贸易&#xff0c;工程&#xff0c;航…

OpenCore 引导完美升级

备份原有 OC (做好回滚的准备下载新版 OpenCore https://github.com/acidanthera/OpenCorePkg/releases将 1, 3, 4 里面的文件使用新版进行替换 4 里面的文件严格来说并不需要, 只是留着方便使用不追求完美到这就可以收工了将 OC 复制到 U 盘 EFI U 盘格式化可以使用: diskutil…

微服务开发与实战Day09 - Elasticsearch

一、DSL查询 Elasticsearch提供了DSL&#xff08;Domain Specific Language&#xff09;查询&#xff0c;就是以JSON格式来定义查询条件。类似这样&#xff1a; DSL查询可以分为两大类&#xff1a; 叶子查询&#xff08;Leaf query clauses&#xff09;&#xff1a;一般是在特…

Fortran 编程整理

Fortran编程语法整理 01 Fortran 中的程序单元1-1 submodule&#xff08;子模块&#xff09; 02 子程序与函数2-1 概述2-2 函数与子程序特性&#xff08;1&#xff09;为函数结果指定不同名称 03 stop命令后跟说明04 do concurrent4-1 do concurrent 的使用 05 纯过程&#xff…

Docker Jenkins(改错版本)

Devops:它强调开发(Development)和运维(Operations)团队之间的协作.实现更快,更可靠的软件交付部署. JenKins是一个开源的自动化服务器,广泛用于构建,测试和部署软件项目.它是持续集成(CI)和持续交付/部署(CD)的工具.JenKins是实现DevOps实践的重要工具. 前端项目部署一般流程:…

Matlab|基于V图的配电网电动汽车充电站选址定容-可视化

1主要内容 基于粒子群算法的电动汽车充电站和光伏最优选址和定容 关键词&#xff1a;选址定容 电动汽车 充电站位置 仿真平台&#xff1a;MATLAB 主要内容&#xff1a;代码主要做的是一个电动汽车充电站和分布式光伏的选址定容问题&#xff0c;提出了能够计及地理因素和服…

ubantu 计算一个文件夹内的文件数量命令

ubantu 计算一个文件夹内的文件数量命令 在Ubuntu中&#xff0c;你可以使用find命令来计算一个文件夹内的文件数量。以下是一个基本的命令示例&#xff1a; find /path/to/directory -type f | wc -l这里的/path/to/directory是你想要计算文件数量的文件夹的路径。find命令会…

蓝队-溯源技巧

溯源技巧 大致思想 通常情况下&#xff0c;接到溯源任务时&#xff0c;获得的信息如下 攻击时间 攻击 IP 预警平台 攻击类型 恶意文件 受攻击域名/IP其中攻击 IP、攻击类型、恶意文件、攻击详情是溯源入手的点。 通过攻击类型分析攻击详情的请求包&#xff0c;看有没有攻击者…

Web前端网页源代码:深入剖析与实用技巧

Web前端网页源代码&#xff1a;深入剖析与实用技巧 在Web开发的浩瀚领域中&#xff0c;前端网页源代码扮演着至关重要的角色。它不仅是网页的骨架&#xff0c;更是实现各种交互和视觉效果的基石。本文将从四个方面、五个方面、六个方面和七个方面&#xff0c;对Web前端网页源代…

C# OpenCvSharp 矩阵计算-determinant、trace、eigen、calcCovarMatrix、solve

🚀 在C#中使用OpenCvSharp库进行矩阵操作和图像处理 在C#中使用OpenCvSharp库,可以实现各种矩阵操作和图像处理功能。以下是对所列函数的详细解释和示例,包括运算过程和结果。📊✨ 1. determinant - 计算行列式 🧮 定义: double determinant(InputArray mtx); 参数…

web前端网页实例:深度剖析与实践指南

web前端网页实例&#xff1a;深度剖析与实践指南 在数字化时代的浪潮中&#xff0c;web前端网页已成为企业与用户之间的桥梁&#xff0c;承载着信息的传递与交互的重任。本文将通过四个方面、五个方面、六个方面和七个方面的详细剖析&#xff0c;带您深入了解web前端网页实例的…

实在智能应邀出席中国移动科技工作者论坛,分享基于大模型+Agent智能体的“企业大脑”

为大力弘扬科学家精神&#xff0c;激励广大科技工作者践行科技报国、创新为民&#xff0c;争做高水平科技自立自强排头兵&#xff0c;6月6日&#xff0c;中国移动在线营销服务中心&#xff08;以下简称“在线中心”&#xff09;“2024年科技工作者大讲堂暨青年创新创效论坛”于…

Matlab|基于手肘法的kmeans聚类数的精确识别【K-means聚类】

主要内容 在电力系统调度研究过程中&#xff0c;由于全年涉及的风、光和负荷曲线较多&#xff0c;为了分析出典型场景&#xff0c;很多时候就用到聚类算法&#xff0c;而K-means聚类就是常用到聚类算法&#xff0c;但是对于K-means聚类算法&#xff0c;需要自行指定分类数&…

C/C++:指针用法详解

C/C&#xff1a;指针 指针概念 指针变量也是一个变量 指针存放的内容是一个地址&#xff0c;该地址指向一块内存空间 指针是一种数据类型 指针变量定义 内存最小单位&#xff1a;BYTE字节&#xff08;比特&#xff09; 对于内存&#xff0c;每个BYTE都有一个唯一不同的编号…

赶紧转行大模型,预计风口就今年一年,明年市场就饱和了!不是开玩笑

恕我直言&#xff0c;就这几天&#xff0c;各大厂都在裁员&#xff0c;什么开发测试运维都裁&#xff0c;只有大模型是急招人。 你说你不知道大模型是什么&#xff1f;那可太对了&#xff0c;你不知道说明别人也不知道&#xff0c;就是要趁只有业内部分人知道的时候入局&#…

深入理解Python中的多线程与多进程编程

深入理解Python中的多线程与多进程编程 在现代计算中,充分利用多核处理器和并行计算资源变得越来越重要。Python提供了多线程和多进程编程的支持,使开发者能够编写高效的并行程序。本文将深入探讨Python中的多线程与多进程编程,包括基本概念、使用方法以及实际应用场景。 …

String常用方法详解

auth&#xff1a;别晃我的可乐 date&#xff1a;2024年06月16日 比较大小 equals(Object obj): 用于比较字符串内容是否相等。compareTo(String anotherString): 按字典顺序比较两个字符串。 String str1 "hello"; String str2 "world";boolean isEqual …

配置Linux DNS服务器作为自己的windows 的 DNS服务器和 配置遇到的问题

安装DNS 库 和 DNS工具&#xff1a; # bind 是用于创建 dns服务的&#xff0c; bind-utils是用于测试DNS服务的工具 yum -y install bind bind-utils配置主配置文件&#xff1a; # 下载好后就已经有DNS服务&#xff0c;但是需要你自己去配置DNS服务信息# 配置主配置文件 [rootl…

SylixOS下UDP组播测试程序

SylixOS下UDP组播测试 测试效果截图如下: udp组播发送测试程序。 /********************************************************************************************************* ** ** 中国软件开源组织 ** ** …