Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8883

Nodeでmultipart/form-dataを送る

$
0
0

form-dataを使う。

form-data/form-data: A module to create readable "multipart/form-data" streams. Can be used to submit forms and file uploads to other web applications.

Axios

constaxios=require("axios");constFormData=require("form-data");constform=newFormData();form.append("message","hello");constres=awaitaxios.post(API,form,{headers:form.getHeaders()});

node-fetch

constfetch=require("node-fetch");constFormData=require("form-data");constform=newFormData();form.append("message","helllo");constres=awaitfetch(API,{method:"POST",body:form});

なぜ node-fetchはヘッダーでgetHeaders()を利用しなくていいのか?

理由は単純で、form-dataを特別に扱っている。
https://github.com/node-fetch/node-fetch/blob/c167190c6ee21234ba41bd8430700d4720bf64ce/src/body.js#L320-L323

// Detect form data input from form-data moduleif(body&&typeofbody.getBoundary==='function'){return`multipart/form-data;boundary=${body.getBoundary()}`;}

さて、multipart/form-data;はいいにしても、boundaryとはなんだろうか。
boundaryとは、複数の情報を続けて送る際、データの仕切り線の役割を果たす。
form-dataの実装を見ると、-が26文字、ランダムな数値が24字の50文字の仕切り線を生成する。

https://github.com/form-data/form-data/blob/d7026253e728af9568503dc3dc55cd1a566605e0/lib/form_data.js#L342-L351

FormData.prototype._generateBoundary=function(){// This generates a 50 character boundary similar to those used by Firefox.// They are optimized for boyer-moore parsing.varboundary='--------------------------';for(vari=0;i<24;i++){boundary+=Math.floor(Math.random()*10).toString(16);}this._boundary=boundary;};

これに\r\nを付加したものを区切りにする。
詳しくは、以下の記事に詳しい。

いまさら聞けないHTTPマルチパートフォームデータ送信 - SATOXのシテオク日記


Viewing all articles
Browse latest Browse all 8883

Trending Articles