Node.js requestモジュールでmultipart/form-dataをPOSTしてファイルアップロード

こんにちは。レモンティーです。

今回はrequestモジュールのmultipart/form-dataです。
github.com

node.jsで、あるHTMLフォームと同じリクエストを送りたいという場合、requestモジュールが便利です。

例えば以下のHTMLのformと同じリクエストを送りたい場合…

index.html

<form 
action="http://hoge.com/upload.php" 
method="POST" enctype="multipart/form-data">

  <input type="file" name="file1">
  <input type="submit" value="Submit">

</form>

requestモジュールでは以下のように書けます。

index.js

const formData = {
  file1:{
      value: fs.createReadStream(path),
      options:{
          filename:"hoge.ext",
          contentType:"application/octet-stream"
      }
  }
}

const options = {
  url:"http://foo.com/upload.php",
  formData:formData,
  method:"post",
  headers:{
      "Content-Type":"multipart/form-data"
  }
} 

request(options,callback);

ちょっと公式ドキュメントを見た場合に間違いがちなのは

<input type="file" name="file1">

のname属性の指定がformDataに渡すオブジェクトのプロパティ名と対応しているっぽいというあたりかと思います。この場合だと

const formData = {
  file1: { ... }
}

となっている部分です。

詰まったらより詳しいことはこちらにあるようです。
github.com


今回はこれでおしまいです。
www.sawalemontea.com