LINE Botで画像を取り扱う方法

6433 ワード

LINE Botでの画像の取り扱い方法

LINE Botで画像を扱う方法は以下の2種類あります。

  • Stream API
  • Buffer

今回はLINE Botでのこの2つの取り扱い方法について説明します。

前提条件

  • messageId:webhookで取得したevent.message.id
  • line:@line/bot-sdkで初期化したClient

Stream API

export const getMessageContent = (messageId: string): Promise<Readable> => {
  return line.getMessageContent(messageId)
}

返り値はReadableとして扱うことができます。

Buffer

export const getMessageContent = (messageId: string): Promise<Buffer> => {
  return new Promise((resolve, reject) =>
    line
      .getMessageContent(messageId)
      .then((stream) => {
        const content: Buffer[] = []
        stream.on('data', (chunk) => content.push(Buffer.from(chunk)))
        stream.on('end', () => resolve(Buffer.concat(content)))
        stream.on('error', (err) => {
          logger.error(err)
          reject('lineGetContent')
        })
      })
      .catch((err) => {
        logger.error(err)
        reject('lineGetContent')
      })
  )
}

違い

LINEに送った画像をそのまま他のストレージサーバーにアップロードする場合は、Stream APIで扱うほうがメモリを浪費せずに済みます。
Bufferを扱うのは、Canvasや外部APIを使って画像を加工または解析する際によく使われます。