LoginSignup
2
2

More than 3 years have passed since last update.

Node.jsを使ってChatworkに画像をアップロードをする

Last updated at Posted at 2019-08-26

動機

ChatworkAPIで画像をアップロードしたいときにcurlを使えばサクッとできますが、Node.jsで使いたい場合のケースもあると思います。
ただ、検索してみるとPythonとChatworkAPIの説明は有志ある方があるけれども、Node.jsとChatworkAPIを使っての画像アップロードの方法についての説明が中々ない・・・
という思いをきっかけに書いてみました。

(´-`).。oO(頑張ってアップロードできるコードを書いてみよう・・・)

コードを書く前に確認

  • request, fsを使うため、npmにてインストールされていること

サンプルコード

/**
 * chatworkにAPI経由で画像をアップロードするテスト(Node.js)
 */
var con = require('./const.js');
var req = require('request');
var fs  = require('fs');

var formData = {
    'file' : {
        'value'   : fs.createReadStream('./hogehoge.png'), // アップロードしたいファイルを指定してください
        'options' : {
            'filename'     : 'hogehoge.png', // ファイル名は任意でどうぞ
            'Content-Type' : 'image/png'     // 画像ファイルに合わせて変更してください
        }
    },
    'message'        : 'hogehogeをnode.js使って送るよ!' // 一緒に送信したいメッセージはこちらに。なければ省略可。
};

var options = {
    'url'      : 'https://api.chatwork.com/v2/rooms/' + con.room_id + '/files',
    'formData' : formData,
    'headers'  : {
        'X-ChatWorkToken' : con.token_id,
        'Content-Type'    : 'multipart/form-data'
    }
};

req.post(options, function (error, response, body) {
   console.log(body);  // 送信後の処理はこちら
});

※room_idとtoken_idは別のjsにmodule.exportsで記載しています

解説

ChatworkAPIリファレンスにあるリクエストボディイメージ(例)ですが、
このフォーム部分の準備をformData変数で行っています。

--------------------------f295b94a5560e2eb
Content-Disposition: form-data; name="file"; filename="hogehoge.png"
Content-Type: image/png
abc012....binarydata....789de
...
--------------------------f295b94a5560e2eb
Content-Disposition: form-data; name="message"
hogehogeをnode.js使って送るよ!
--------------------------f295b94a5560e2eb--

実行した後のチャット画面

以下のようになります。
やった、、、あがった!ε-(´∀`*)ホッ
image.png

最後に

例外処理とか色々実装する必要がありますが、ひとまずアップロードするという目標達成のために割愛させて頂いてます。。。
送信ユーザーを別にするなどはまたどこかの機会で。

下記サイト様の内容を参考させて頂きましたm(_ _)m

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2