現在、linebotに送信された画像をnode.jsでoutフォルダに保存するというプログラムを組み立てています。
以下のコードを用いるとoutフォルダにはtest.jpgというデータで保存することができました。
しかし、test.jpgをwindowsフォトビューアで開いてみると「ファイルが破損しているか、大きすぎる可能性があります。」とエラーが表示されます。
https://qiita.com/nbapps_dev/items/d9c689a61cc5dd8440ee
https://qiita.com/PianoScoreJP/items/8b477a2bb09dd1db7826
いくつかのサイトを参考にしてエンコーディングを変えたりしてみましたが、やはり開くことができないファイルのままでした。
ちなみに作成されたtest.jpgは、ディスク上のサイズが0バイトであり、ファイルが破損している可能性が考えられます。
アドバイスよろしくお願いします。
以下のコードでは、★部分が問題となるfs.writefile()となっています。
JavaScript
1'use strict'; 2const fs = require('fs'); 3const bodyParser = require('body-parser'); 4const express = require('express'); 5const line = require('@line/bot-sdk'); 6const PORT = process.env.PORT || 3000; 7const config = { 8 channelSecret: '適切なものを記入', 9 channelAccessToken: '適切なものを記入' 10}; 11const app = express(); 12 13app.post('/webhook', line.middleware(config), (req, res) => { 14 console.log(req.body.events); 15 Promise 16 .all(req.body.events.map(handleEvent)) 17 .then((result) => res.json(result)); 18}); 19 20const client = new line.Client(config); 21 22function handleEvent(event) { 23 if (event.type !== 'message' || event.message.type !== 'text') { 24 return ★fs.writeFile("./out/test.jpg",event.message.image,"binary",(error)=>{ 25 if(error){ 26 console.log("error"); 27 } 28 }); 29 } 30 return client.replyMessage(event.replyToken, { 31 type: 'text', 32 text: event.message.text //実際に返信の言葉を入れる箇所 33 }); 34} 35 36app.listen(PORT); 37console.log(`Server running at ${PORT}`);
(追記)
getMessageContentを使用して以下のように★付近のコードを変更しました。
python
1 2if (event.message.type == "image"){ 3 4 return client.getMessageContent(event.message.id).then((stream) => { 5 stream.on('data', (chunk) => { 6 //console.log(chunk); 7 fs.writeFile("./out/test.jpg",chunk,"binary",(error)=>{ 8 if(error){ 9 console.log("error"); 10 } 11 }) 12 }) 13}) 14 15
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/22 07:36