Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.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 创建写入流以下载不带Node.js的音频流_Javascript_Node.js - Fatal编程技术网

Javascript 创建写入流以下载不带Node.js的音频流

Javascript 创建写入流以下载不带Node.js的音频流,javascript,node.js,Javascript,Node.js,我正在尝试在浏览器中使用ytdl core来下载mp3。我让ytdl core在没有Node.js的浏览器中工作,但在将流保存为文件时遇到了一些问题。一般来说,您可能需要一个客户机/服务器一起完成这项工作,但我想知道是否可以在客户端完成这项工作 这是我不知道如何使用纯JS重新创建的部分 fs.createWriteStream('video.flv')) 这是我试图下载为mp3的对象: PassThrough {_readableState: ReadableState, readable:

我正在尝试在浏览器中使用ytdl core来下载mp3。我让ytdl core在没有Node.js的浏览器中工作,但在将流保存为文件时遇到了一些问题。一般来说,您可能需要一个客户机/服务器一起完成这项工作,但我想知道是否可以在客户端完成这项工作

这是我不知道如何使用纯JS重新创建的部分

fs.createWriteStream('video.flv'))
这是我试图下载为mp3的对象:

PassThrough {_readableState: ReadableState, readable: true, _events: {…}, _eventsCount: 2, _maxListeners: undefined, …}
allowHalfOpen: true
destroy: () => { stream._isDestroyed = true; }
readable: true
writable: true
_events: {end: ƒ, prefinish: ƒ}
_eventsCount: 2
_maxListeners: undefined
_readableState: ReadableState {objectMode: false, highWaterMark: 524288, buffer: BufferList, length: 0, pipes: null, …}
_transformState: {needTransform: false, transforming: false, writecb: null, writechunk: null, afterTransform: ƒ, …}
_writableState: WritableState {objectMode: false, highWaterMark: 524288, finalCalled: false, needDrain: false, ending: false, …}
destroyed: (...)
readableHighWaterMark: (...)
writableHighWaterMark: (...)
__proto__: Transform
这是ytdl core使用Node.js给出的示例

const fs=require('fs');
常量ytdl=require('ytdl-core');
//TypeScript:从“ytdl核心”导入ytdl;使用--esModuleInterop
//TypeScript:从“ytdl核心”导入*作为ytdl;使用--allowSyntheticDefaultImports
//TypeScript:import ytdl=require('ytdl-core');以上两项都没有
ytdl('http://www.youtube.com/watch?v=A02s8omM_hI')
.pipe(fs.createWriteStream('video.flv');
所以我的问题是,有没有一种方法可以将文件流保存在纯JS中,然后在浏览器中全部下载

"This is the part that I don't know how to recreate using pure JS.

fs.createWriteStream('video.flv')
请查收

也许会有帮助

这是MDN页面的一部分

Streaming involves breaking a resource that you want to receive over a network down 
into small chunks, then processing it bit by bit. This is something browsers do anyway 
when receiving assets to be shown on webpages — videos buffer and more is gradually 
available to play, and sometimes you'll see images display gradually as more is 
loaded.

But this has never been available to JavaScript before. Previously, if we wanted to 
process a resource of some kind (be it a video, or a text file, etc.), we'd have to 
download the entire file, wait for it to be deserialized into a suitable format, then 
process the whole lot after it is fully received.

With Streams being available to JavaScript, this all changes — you can now start 
processing raw data with JavaScript bit by bit as soon as it is available on the 
client-side, without needing to generate a buffer, string, or blob.

我正在研究这个问题,但是缺少浏览器支持有点令人担忧。现在,如果我想试试这个,你知道我如何将可写流保存到一个文件中吗?我可以在线收集的所有信息都使用Node.js,我真的很想坚持使用纯js。。检查此链接。可能需要创建一个blob。下面是一个图像示例。