当前位置: 首页 > 知识库问答 >
问题:

使用可读流实例而不是缓冲区重写函数,返回base64流

席兴朝
2023-03-14

我有一个使用的函数,当返回的数据audio是缓冲区时,它可以正常工作:

PS:我不能将文件保存到系统-所以不能使用fs

(async function () { // Needed in my context
const stream = require('stream');
    try {
function gettingFile(params) {
    return new Promise((resolve, reject) => {
        library.getFile(params, function(error, data) {
            if (error) {
                reject(error);
            } else {
                var base64data = data.Audio.toString('base64');   <----- getFile returns data as Buffer, so far so good                        
                return resolve(base64data);           
            }
        });
    });
};
var retrievedBase64Data = await gettingFile(params);
callback(undefined, retrievedBase64Data);
    } catch (err) {                
        callback(err)              
    }
})()

但是,最近发生了更改,data.audio现在返回一个可读流,因此我尝试了这个操作,但会崩溃:

(async function() {
    const stream = require('stream');
    try {
        function gettingFile(params) {
            return new Promise((resolve, reject) => {
                library.getFile(params, function(error, data) {
                    if (error) {
                        reject(error);
                    } else {
                        var fileStream = new stream.Writable();
                        data.Audio.pipe(fileStream);                    <-- getFile returns data as Readable Stream
                        var base64data = fileStream.toString('base64'); <-- I probably messed up.
                        return resolve(fileStream);
                    }
                });
            });
        };
        var retrievedBase64Data = await gettingFile(params);
        callback(undefined, retrievedBase64Data);
    } catch (err) {
        callback(err)
    }
})()

您知道如何使缓冲区切换到吗?

共有1个答案

华宣
2023-03-14
      (async function() {
        const stream = require('stream');
        try {
            function gettingFile(params) {
                return new Promise((resolve, reject) => {
                    library.getFile(params, function(error, data) {
                        if (error) {
                            reject(error);
                        } else {
                          const writeStream = fs.createWriteStream('audioName') 
                          data.on('data',(chunk) => { 
                            console.log('data received');
                            writeStream.write(chunk); 
                          }); 
      
                          data.on('end', ()=>{
                              console.log('File saved!')
                              return resolve(writeStream)
                          });
                            
                          data.on('error', ()=>{
                              console.log(err.stack);
                          });
                        }
                    });
                });
            };
            var retrievedBase64Data = await gettingFile(params);
            callback(undefined, retrievedBase64Data);
        } catch (err) {
            callback(err)
        }
    })()
 类似资料:
  • 下面的代码尝试使用缓冲区将WAV文件的头写入流,然后将其写入可写流。 出于某种原因,文件的前8个字节是错误的: 第一行应该是: 这条线路有故障: 它需要:

  • 在Java 8中,我越来越多地用替换返回值。 所以我曾经有: 我现在使用: 我对此的论点是: 它强制执行基础列表的不变性。 它隐藏了存在基础列表的事实。之后可以将其更改为集合或其他结构,而无需更改方法签名 它很好地封装了该方法的用户希望对项进行处理,而不是对列表进行处理 如果需要,它可以在以后进行简单的并行化 事实上,现在,在我的代码中,返回<code>列表 显然,其中一些可以通过不可变集合来实现

  • 问题内容: 我正在尝试读取(位于Javascript源的同一文件夹中)的内容,并使用以下代码显示它: 的内容创建于: 测试Node.js readFile() 我得到这个: 问题答案: 从文档: 如果未指定编码,则返回原始缓冲区。 这可能解释了。指定一个有效的编码,例如作为文件名之后的第二个参数。如,

  • 问题内容: 在使用stream2接口之后,如何将node.js缓冲区转换为Readable流? 问题答案: 使用流化器,您可以使用新的流API将字符串和缓冲区转换为可读流。

  • 我如何能转换一个node.js缓冲区到一个可读流以下使用Streum2接口? 我已经找到了这个答案和streambuffers模块,但是这个模块基于stream1接口。

  • 问题内容: 我写了一个非常简单的函数,可以从给定的URL下载图像,调整图像大小并上传到S3(使用’gm’和’knox’),我不知道我是否在正确地将流读取到缓冲区中。(一切正常,但这是正确的方法吗?) 另外,我想了解一些有关事件循环的知识,如何知道该函数的一次调用不会泄漏任何内容,也不会将’buf’变量更改为另一个已经运行的调用(否则这种情况是不可能的,因为回调是匿名的功能?) 问题答案: 总的来说