駄文型

プログラミングとか英語とかの話題を中心にした至極ちゃらんぽらんな日記です。

ファイルをcurlでアップロードしてNode.jsで受け取る

なかなかうまく行かなくて半日かかったのでまとめておく。

参考

Node.jsアプリ

まずはmulterを入れてNode.jsアプリを構築。

$ npm install --save multer
var express = require('express');
var multer  = require('multer');
var upload = multer({ dest: 'uploads/' });
var app = express();

app.post('/', upload.single('data'), function (req, res) {
  console.log(req.file);
  res.end('success');
});

app.listen(4000, function () {
  console.log('Example app listening on port 4000!');
});

curlコマンドでテスト

ローカルでテストする場合はlocalhostcurlでPOSTを投げるだけ。

$ curl "localhost:4000" -X POST -F data=@test/test.csv

今回はtest/test.csvを用意した。jsonでもなんでもいい。

column0,column1,column2,column3
1,2,3,4
a,b,c,d

結果

{ fieldname: 'data',
  originalname: 'test.csv',
  encoding: '7bit',
  mimetype: 'application/octet-stream',
  destination: 'uploads/',
  filename: 'de080535f6452289e8b896236c0d179d',
  path: 'uploads/de080535f6452289e8b896236c0d179d',
  size: 49 }

uploadディレクトリにファイルが作成された。uploadディレクトリは勝手に作成されるっぽい。req.fileのところでreq.bodyreq.filesを指定してたのでずっと{}とだけ表示されてかなりハマってしまった。README見たらちゃんと.singleのときはreq.fileって書いてあった。つらい。