🌁
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