首页 > 解决方案 > createReadStream 不采用 blob url?

问题描述

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 is not a function

如果我传递了一些在线视频 URL,问题将不存在。那么我怎样才能从中读取 blobfs.createReadStream呢?谢谢!

标签: node.jsblob

解决方案


当我查看后面的代码时fs.createReadStream(),它会调用 new ReadStream() 并将路径/url 传递给它。在这行代码中,似乎唯一受支持的 url 类型是文件 URL。该文档对该主题保持沉默,这就是我去看代码的原因。因此,在我看来,它不fs.createReadStream()支持那种类型的伪 URL。

由于您只需要来自该 URL 的读取流,并且您拥有远程资源的实际 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
});

仅供参考,您可能会发现这个关于 Blob URL 的答案很有用。我没有看到任何fs.createReadStream()支持 blob URL 的证据。在浏览器中,它们仅由浏览器内部创建,仅在特定网页上下文中有用(它们间接引用某些内部存储),不能在网页外部传递,甚至不能从一个网页保存页到下一页。如果您希望您的服务器能够从浏览器中创建的 blob URL 访问实际数据,则必须将实际数据上传到您的服务器。您的服务器无法访问在浏览器中创建的 blob URL。


推荐阅读