讲师中心 微信公众号
AI工具推荐 视频效率加速

JavaScript文件操作_Blob与Stream处理

星婷姑娘_6159

星婷姑娘_6159

发布时间:2025-11-23 21:42:06

|

384人浏览过

|

来源于php中文网

原创

Blob用于处理小到中等大小的二进制文件,支持创建、下载和读取文件;2. Stream通过分块处理实现高效的大数据流操作,提升性能;3. 两者可相互转换,适应不同场景,合理使用可显著优化Web应用的文件处理能力。

javascript文件操作_blob与stream处理

在Web开发中,直接操作文件系统受到浏览器安全策略的限制,但通过 Blob 和 Stream,JavaScript 可以高效处理文件数据,实现下载、上传、切片、转换等操作。这类技术广泛应用于大文件上传、视频剪辑预览、日志导出等场景。

Blob:二进制大对象处理

Blob(Binary Large Object)表示不可变的原始二进制数据,常用于表示文件内容,比如图片、音频、文本等。它体积小、兼容性好,适合小到中等大小的文件操作。

常见用途:
  • 创建文件并触发下载
  • 将 Canvas 内容转为图片文件
  • 作为 File 的父类,用于上传或读取
示例:生成文本文件并下载
const content = 'Hello, this is a test file.';
const blob = new Blob([content], { type: 'text/plain' });
const url = URL.createObjectURL(blob);

const a = document.createElement('a');
a.href = url;
a.download = 'test.txt';
a.click();

// 清理内存
URL.revokeObjectURL(url);
从 Blob 获取数据: 使用 FileReader 读取 Blob 内容:
const reader = new FileReader();
reader.onload = function(e) {
  console.log(e.target.result); // 输出文本内容
};
reader.readAsText(blob);

Stream:高效处理大数据流

当处理大文件(如视频、日志、压缩包)时,一次性加载到内存会消耗巨大资源。此时应使用 Streams API,它允许分块读取和处理数据,提升性能与响应速度。

sc-java-to-ts-interface
sc-java-to-ts-interface

将后端 Java 接口文档转换为前端 TypeScript 类型定义(interface / type)。输入:飞书文档、Spring Boot 接口文档、Swagger/OpenAPI、手写 API 文档等。输出:包含请求参数与响应结果的 .md 文件,含完整 JSDoc 注释。触发关键词:Java 转 TS、接口转换、生成前端类型、接口文档转 TypeScript、DTO/VO/BO 转 interface、后端文档转前端类型、生成接口类型、类型定义生成。

下载
Streams 核心概念:
  • ReadableStream:可读流,用于读取数据块
  • WritableStream:可写流,用于写入数据块
  • TransformStream:转换流,连接读写,中间处理数据
示例:通过 fetch 获取流式响应
fetch('/large-file.txt')
  .then(response => {
    const reader = response.body.getReader();
    return new ReadableStream({
      start(controller) {
        function push() {
          reader.read().then(({ done, value }) => {
            if (done) {
              controller.close();
              return;
            }
            controller.enqueue(value);
            push();
          });
        }
        push();
      }
    });
  })
  .then(stream => {
    return new Response(stream).text();
  })
  .then(text => console.log(text));
实际应用:压缩或编码转换 使用 TransformStream 对流数据进行实时处理:
const transform = new TransformStream({
  transform(chunk, controller) {
    // 将每一块转为大写(示例)
    const upperChunk = chunk.toUpperCase();
    controller.enqueue(upperChunk);
  }
});

const writer = transform.writable.getWriter();
writer.write('hello');
writer.write('world');
writer.close();

// 从 transform.readable 读取处理后的数据

Blob 与 Stream 的转换

两者可以互相转换,适应不同处理阶段的需求。

立即学习“Java免费学习笔记(深入)”;

Blob 转 Stream:
const blob = new Blob(['Some data'], { type: 'text/plain' });
const stream = blob.stream(); // 返回 ReadableStream
Stream 转 Blob: 收集流数据后构造 Blob:
async function streamToBlob(stream, mimeType = 'text/plain') {
  const reader = stream.getReader();
  const chunks = [];
  while (true) {
    const { done, value } = await reader.read();
    if (done) break;
    chunks.push(value);
  }
  return new Blob(chunks, { type: mimeType });
}
基本上就这些。Blob 简单直接,适合常规文件操作;Stream 更强大,适合高性能、低内存的大数据处理。合理选择能显著提升用户体验。

热门AI工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

相关专题

更多
go语言 数组和切片
go语言 数组和切片

本专题整合了go语言数组和切片的区别与含义,阅读专题下面的文章了解更多详细内容。

1892

2025.09.03

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

4371

2023.10.23

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

264

2026.05.19

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

80

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

40

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

40

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

20

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

40

2026.10.22

Golangci-lint配置文件与规则设置
Golangci-lint配置文件与规则设置

本专题聚焦Golangci-lint YAML配置文件,讲清运行参数、规则启停、目录排除、问题过滤及严重级别设置,便于团队统一检查标准。

20

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Gradle 官方入门教程
Gradle 官方入门教程

共0课时 | 0人学习

ProcessOn我的文件
ProcessOn我的文件

共0课时 | 0人学习

jQuery官方API文档
jQuery官方API文档

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn