Записать изображение ReadableStream в файл - PullRequest
0 голосов
/ 09 ноября 2019

Я пробовал разные вещи весь день, но, кажется, ничто не предлагает простой, прямой способ записи ReadableStream (который является изображением) в файл. Я вызываю API, который возвращает ReadableStream, но что тогда? Я попытался покопаться в объекте немного больше и следовал по нему до возвращения 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 голосов
/ 09 ноября 2019

Наконец-то нашли решение. Я не очень хорошо понимаю pipe(), но когда он вызывается из ReadableStream с параметром filepath в качестве параметра, он работает.

Ответ API thumbResponse.readableStreamBody был ReadableStream. Таким образом, любой, у кого есть читаемый поток, может использовать это решение. Не нужно вызывать 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')
      })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...