Node.js createReadStream不';不接受blob url?
Node.js createReadStream不';不接受blob url?,node.js,blob,Node.js,Blob,this.state.videoBlob是一个blob对象。我使用URL.createObjectURL生成一个blob URL,并将其传递给fs.createReadStream,如下所示: fs.createReadStream(URL.createObjectURL(this.state.videoBlob)) 此blob url看起来像: blobURL:blob:http://localhost:3000/dabe5cdd-00cc-408a-9f3d-b0ba5f2b10b3 但我有
this.state.videoBlob
是一个blob对象。我使用URL.createObjectURL生成一个blob URL,并将其传递给fs.createReadStream,如下所示:
fs.createReadStream(URL.createObjectURL(this.state.videoBlob))
此blob url看起来像:
blobURL:blob:http://localhost:3000/dabe5cdd-00cc-408a-9f3d-b0ba5f2b10b3
但我有一个错误说:
TypeError:fs.createReadStream不是函数
如果我传递一些在线视频URL,这个问题就不存在了。那么如何从
fs.createReadStream
读取blob呢?谢谢 当我查看fs.createReadStream()
后面的代码时,它调用new ReadStream(),并将路径/url传递给它。在上,似乎支持的唯一url类型是文件url。医生没有提到这个话题,这就是为什么我去看代码的原因。因此,在我看来,fs.createReadStream()
不支持这种类型的伪URL
由于您只需要该URL中的readstream,并且您拥有远程资源的实际URL,因此我建议您只使用http.get()
或request()
或类似的方法,所有这些方法都会联系远程主机并向您返回readstream。因为您的目标是获得readStream,所以这是实现这一目标的一种方法
http.get('http://localhost:3000/dabe5cdd-00cc-408a-9f3d-b0ba5f2b10b3', (res) => {
// res is a readstream here
}).on('error', (err) => {
// error on the request here
});
仅供参考,您可能会发现这很有用。我没有看到任何证据表明
fs.createReadStream()
支持blob URL。在浏览器中,它们是仅由浏览器内部创建的东西,仅在特定网页上下文中有用(它们间接指一些内部存储),不能传递到网页外部,甚至不能从一个网页保存到下一个网页。如果您希望服务器能够从浏览器中创建的blobURL访问实际数据,则必须将实际数据上载到服务器。您的服务器无法访问在浏览器中创建的blob URL。当我查看fs.readStream()
后面的代码时,它调用new readStream()
,并将路径/URL传递给该浏览器。在上,似乎支持的唯一url类型是文件url。该文档对该主题保持沉默,这就是我去查看代码的原因。我不理解像这样的URL的意义:blob:http://localhost:3000/dabe5cdd-00cc-408a-9f3d-b0ba5f2b10b3
所以我不知道该怎么处理它。如果它是一个远程资源,那么您可以只使用http.get()
或request()
在实际URL上,您将从中获得一个readStream。blob:http://localhost:3000/dabe5cdd-00cc-408a-9f3d-b0ba5f2b10b3
是我在我的browser@damingzi-这能为你解释吗?谢谢@jfriend00。它解释了为什么fs.createReadStream()不适用于浏览器生成的blob。