从上传图片的过程认识Stream 和Buffer

简介: 遇到这样的业务场景:一张图片,传递给第三方(第三方以接口形式接收),且图片是二进制数据,是binary类型。在我的初印象中,对于图片的操作都会转化成 stream或者base64,如果传递二进制数据是不是应该传递的是一些二进制字符串?还是buffer类型?还是Stream?

前言

遇到这样的业务场景:一张图片,传递给第三方(第三方以接口形式接收),且图片是二进制数据,是binary类型。

在我的初印象中,对于图片的操作都会转化成 stream或者base64,如果传递二进制数据是不是应该传递的是一些二进制字符串?还是buffer类型?还是Stream?

今天在官网中JavaScript对Buffer类的定义看到一句话:

JavaScript 语言没有读取或操作二进制数据流的机制。 Buffer 类被引入作为 Node.js API 的一部分,使其可以在 TCP 流或文件系统操作等场景中处理二进制数据流。

重新深入学习一下,流?二进制数据流?Buffer?

Stream:流

  • 流是用于在 Node.js 中处理流数据的抽象接口
  • 是一个逻辑概念,是对输入输出设备(网络、文件、图片)的抽象
  • 是一系列数据从A处传输到B处过程的数据流
  • 场景:大文件,大数据通过流传输,可以不用等数据都传输完再进行下一步工作

Buffer:缓冲区

  • 通常上,缓存区,就是一个物理存储区域,但是在node中Buffer类是二进制数据抽象类型
  • Buffer 对象用于表示固定长度的字节序列

通过一个Demo:通过fs模块,读取一张图片获取到图片的文件流

const fs = require('fs');
const path = require('path');
​
( async () =>{
    getFiles();
})();
​
// 读取文件
function getFiles() {
   const fileStream =  fs.createReadStream(path.join(__dirname,'./test111.jpg'));
   console.log(fileStream);
}

fileStream是fs.ReadStream类型,又继承自stream.Readable类,所以通过createReadStream读取的图片数据就是个二进制数据流,将此数据传递给第三方接口时可以正常传输。

之前因为自己对Binary类型执着,一直以为stream,buffer,binary是三种数据类型,而binary 是Buffer的一种编码方式,nodejs没有binary数据类型,都是通过Buffer类来处理二进制数据。但是有时候类似文件或者网络比较大的数据时,Buffer无法支持时,可使用stream。

参考资料:

目录
相关文章
|
前端开发 JavaScript 数据格式
图片URL转file文件(前端+后端node.js)
图片URL转file文件(前端+后端node.js)
markdown常用语法--花括号(超详细)
markdown常用语法--花括号(超详细)
|
Java Spring
RestTemplate上传文件解决方案
当对接文件上传模块时,需要对接上传文件的接口,而我们模块的数据是以字节数组存在的(已经操作过了的字节数组,存在于内存中)接口是以form-data的形式上传的,其中需要上传MultipartFIle,如果使用MultipartFile放入到请求的 fromMap中,然后再上传这个文件,会报(ByteArrayInputStream no serialized)的错误,也就是没有注入对应的bean的错误。。
5106 0
|
JavaScript 前端开发 程序员
动态语言、静态语言、强类型语言、弱类型语言的区别
动态语言、静态语言、强类型语言、弱类型语言的区别
|
9月前
|
SQL 关系型数据库 MySQL
数据库数据恢复——MySQL简介和数据恢复案例
MySQL数据库数据恢复环境&故障: 本地服务器,安装的windows server操作系统。 操作系统上部署MySQL单实例,引擎类型为innodb,表空间类型为独立表空间。该MySQL数据库没有备份,未开启binlog。 人为误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除,删除后未对该表进行任何操作。
|
缓存 关系型数据库 MySQL
面试题目总结
面试题目总结
322 6
|
JavaScript 前端开发
nodejs使用axios以formdata形式上传图片
nodejs使用axios以formdata形式上传图片
|
前端开发 Java 数据安全/隐私保护
如何在Java中实现文件上传和下载?
如何在Java中实现文件上传和下载?
一文搞懂Go读写Excel文件
一文搞懂Go读写Excel文件
|
前端开发 Java 应用服务中间件
Request 和 Response详解(上)
Request 和 Response详解(上)
401 0