🌁
LINE Botで画像を取り扱う方法
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 を使って画像を加工または解析する際によく使われます。
Discussion