🍃このブログは移転しました。
3秒後、自動的に移動します・・・。

Node.jsのExpressでファイルアップロード

簡単にできるんやろなーと思ってたけど、思ってた以上に簡単やった。

Node.jsのおかげで色んなことができるようになった気がします。

環境設定でミドルウェアを

app.configure(function(){
    // ...
    app.use(express.bodyParser({
        uploadDir: './public'
    }));
    // ...
});

このbodyParserを指定することで、リクエストされたきたものの中身にアクセスできるようになります。(req.body とか req.files とか)
さらに、uploadDir を指定することで、その指定先に対してファイルアップロードが可能に。

そして実は、

// これは
app.use(express.bodyParser());

// これと同じ
app.use(express.json());
app.use(express.urlencoded());
app.use(express.multipart());

uploadDir自体はmultipart へのオプション。
そしてこのmultipart達はもともと、ExpressのベースになってるConnectのモジュール。

あとは受けるのみ

var fs = require('fs');
// その他もろもろ

app.post('/myUploader/upload', function(req, res) {
  // tmp_pathにとりあえず保存して
  var tmp_path = req.files.nameOfFileTag.path,
  target_path = './public';

  // それをtarget_pathへコピー
  fs.rename(tmp_path, target_path, function(err) {
    // そのあとtmp_pathを削除
    fs.unlink(tmp_path, function() {
      res.redirect('/myUploader');
    }); 
  }); 
});

なんて簡単なの・・。