将ReadableStream图片写入文件

时间:2019-11-09 03:01:45

标签: node.js file-io

我整天都在尝试不同的方法,但是似乎没有任何一种方法可以简单,直接地将ReadableStream(是图像)写入文件。我正在调用一个返回ReadableStream的API,但是那又如何呢?我尝试进一步研究该对象,然后一直跟踪它返回一个Buffer[],这似乎应该是需要放入fs.writeFile()的东西,但没有任何效果。该文件已创建,但是我尝试打开该图像,并说它无法打开该文件类型(他们正在谈论的文件类型,我不知道)。

这是我的代码,返回一个Buffer[]。我还可以切断其中一些链,只返回ReadableStream主体,但是随后返回PullThrough,我已经迷失了。关于在线课程的信息很少。有什么建议吗?

这是我正在使用的api:https://docs.microsoft.com/en-us/javascript/api/@azure/cognitiveservices-computervision/computervisionclient?view=azure-node-latest#generatethumbnail-number--number--string--computervisionclientgeneratethumbnailoptionalparams--servicecallback-void--

  // Image of a dog.
  const dogURL = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png';
  await computerVisionClient.generateThumbnail(100, 100, dogURL, { smartCropping: true } )
      .then((thumbResponse) => {
        console.log(thumbResponse.readableStreamBody.readableBuffer.head.data)
        fs.writeFile("thumb.jpg", thumbResponse.readableStreamBody.readableBuffer.head.data, "binary", (err) => {
          console.log('Thumbnail saved')
          if (err) throw err
        })
      })

1 个答案:

答案 0 :(得分:1)

最后找到了解决方案。我不太了解pipe(),但是当以文件路径作为参数从ReadableStream调用它时,它将起作用。

API响应thumbResponse.readableStreamBodyReadableStream。因此,拥有可读流的任何人都可以使用此解决方案。无需调用API。

  // Image of a dog.
  const dogURL = 'https://moderatorsampleimages.blob.core.windows.net/samples/sample16.png';
  await computerVisionClient.generateThumbnail(100, 100, dogURL, { smartCropping: true } )
      .then((thumbResponse) => {
        const destination = fs.createWriteStream("thumb.png")
        thumbResponse.readableStreamBody.pipe(destination)
        console.log('Thumbnail saved')
      })