🌁

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

2022/04/14に公開

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 を使って画像を加工または解析する際によく使われます。

GitHubで編集を提案
YOSHINANI

Discussion