Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript “与”的区别是什么;createReadStream“;及;可读的;上课?_Javascript_Node.js - Fatal编程技术网

Javascript “与”的区别是什么;createReadStream“;及;可读的;上课?

Javascript “与”的区别是什么;createReadStream“;及;可读的;上课?,javascript,node.js,Javascript,Node.js,有人能解释node.js中createReadStream和readable之间的区别吗?根据我的观察,它们是相似的,那么引擎盖下的区别是什么,什么时候应该使用它们 比如说 const s3 = new AWS.S3({ accessKeyId: AWSConfig.AWSConfig.ACCESS_KEY_ID, secretAccessKey: AWSConfig.AWSConfig.SECRET_ACCESS_KEY, }); const para

有人能解释node.js中
createReadStream
readable
之间的区别吗?根据我的观察,它们是相似的,那么引擎盖下的区别是什么,什么时候应该使用它们

比如说

const s3 = new AWS.S3({
      accessKeyId: AWSConfig.AWSConfig.ACCESS_KEY_ID,
      secretAccessKey: AWSConfig.AWSConfig.SECRET_ACCESS_KEY,
    });

    const params = {
      Bucket: AWSConfig.AWSConfig.bucket,
      Key: "somebucketName/1620072325205",
    };
    const file = await s3.getObject(params).promise();
    const fileSize = file.ContentLength / (1024 * 1024);

    const read = new Readable({
      read(fileSize) {
        this.push(file.Body);
        this.push(null);
      },
    });

    read.pipe(res);
这类似于

const s3 = new AWS.S3({
      accessKeyId: AWSConfig.AWSConfig.ACCESS_KEY_ID,
      secretAccessKey: AWSConfig.AWSConfig.SECRET_ACCESS_KEY,
    });

    const params = {
      Bucket: AWSConfig.AWSConfig.bucket,
      Key: "somebucketName/1620072325205",
    };
    const file = await s3.getObject(params).createReadStream();
    file.pipe(res)
    

在NodeJS中,您可以通过以下几种方式创建可读流:

解决方案1

您可以使用
fs
模块来完成。函数
fs.createReadStream()
允许您打开一个可读的流,您所要做的就是传递文件路径以开始流式处理

const fs = require('fs');

const readable_stream = fs.createReadStream('file_path');
解决方案2

如果不想创建文件,可以在内存中创建一个流并对其进行处理(例如,将其上载到某个地方)。​您可以使用
模块执行此操作。您可以从
模块导入
可读的
,并创建可读的流。创建对象时,还可以实现
read()
方法,该方法用于从内部缓冲区读取数据。如果没有可读取的数据,则返回
null
。可选的
size
参数指定要读取的特定字节数。如果未指定
size
参数,则将返回内部缓冲区中包含的所有数据

const Readable = require('stream').Readable;

const readable_stream = new Readable({
  ​read(size) {
   ​// ...
​  }
});
解决方案3

当您通过网络获取某些内容时,可以像流一样获取这些内容(例如,您从某个API获取PDF文档)

解决方案4

第三方软件包可以支持创建流作为一项功能。这是使用示例中的aws sdk包的一种方法

总结和结论


您可以通过几种方式创建可读的
流。由于您已经在使用
aws sdk
包,我想说您应该继续使用他们的
createReadStream()
,而不是导入
stream
模块并使用它创建
可读的
流。

fs.createReadStream()
创建从文件获取数据的可读流。可读性是一种通用的东西。它可以连接到许多不同类型的数据源。因此,
fs.createReadStream()
创建一个连接到文件的文件。感谢您的关注完美解释欢迎。如果它对你有帮助,也可以考虑接受我的回答。
const axios = require('axios');

const readable_stream = await axios({
  method: 'get',
  url: "pdf_resource_url",
  responseType: 'stream'
}).data;