expressでフォームからファイルアップロードする
node.jsでexpress使ってフォームのファイルアップロードする場合、
bodyParser使っていればrequestのfilesから取得できる様子。
実験コード
HTMLはこんな感じ。
<!DOCTYPE HTML> <html lang="en"> <head> <meta charset="UTF-8"> <title>Study</title> </head> <body> <div> <h3>File Upload</h3> <!-- ファイルアップロードフォーム --> <form id="file-form" method="post" action="/postdata" enctype="multipart/form-data"> <input type="file" name="image_file" /> <button type="submit" class="btn">Submit</button> </form> <h3>Uploaded File</h3> <!-- 前にアップロードしたファイル --> <img src="./img/upfile.png" /> </div> </body> </html>
サーバ側のソースこんな感じ。
var express = require('express'), fs = require('fs'), imageDirPath = __dirname + '/webroot/img/', app = express(); app.use(express.static(__dirname + '/webroot')); app.use(express.bodyParser()); app.post('/postdata', function(req, res) { // fileオブジェクト取得 var file = req.files.image_file; // リネームしてimgタグで見れるようにする fs.rename(file.path, imageDirPath + 'upfile.png' , function(err) { if (err) { console.log(err); } // リダイレクトで戻す res.set('Location', '/'); res.send(301); }); }); app.listen(8080);
補足
bodyParserにパラメータ渡すと、一時ファイルで拡張子を維持するとか、一時ファイルの保存ディレクトリを指定できる。
app.use(express.bodyParser({ keepExtensions: true, uploadDir: '/my/files' }));