インストール
ファイルのアップロードするには multer
モジュールを使います。
$ npm install --save multer
1つのファイルをアップロードする
multer
モジュールを使うと multipart/form-data
リクエストでアップロードされたファイルの情報が req.file
に入り、それ以外のデータが req.body
に入ります。
次のコードはアップロードしたテキストファイルのファイル名とその中身をレスポンスとして返します。
multer({ dest: 'tmp/' }).single('file')
で、fileというパラメータ名でファイルのアップロードリクエストを受け付け、アップロードされたファイルをtmp/に保存するという意味になります。
const express = require('express');
const fs = require('fs');
const multer = require('multer');
const app = express();
app.post('/upload', multer({ dest: 'tmp/' }).single('file'), (req, res) => {
const filename = req.body.filename
const content = fs.readFileSync(req.file.path, 'utf-8');
res.send(filename + ': ' + content);
});
app.listen('3000', () => {
console.log('Application started');
});
$ echo Hello > a.txt
$ curl http://localhost:3000/upload -F 'file=@a.txt' -F filename=a.txt
a.txt: Hello
複数のファイルをアップロードする
複数のファイルのアップロードを受け付け、配列としてファイル情報を受け取る時は single
の代わりに array
を使います。
const express = require('express');
const fs = require('fs');
const multer = require('multer');
const app = express();
app.post('/upload', multer({ dest: 'tmp/' }).array('file'), (req, res) => {
const content1 = fs.readFileSync(req.files[0].path, 'utf-8');
const content2 = fs.readFileSync(req.files[1].path, 'utf-8');
res.send(content1 + content2);
});
app.listen('3000', () => {
console.log('Application started');
});
$ echo Hello > a.txt
$ echo Goodbye > b.txt
$ curl http://localhost:3000/upload -F 'file=@a.txt' -F 'file=@b.txt'
Hello
Goodbye
もしくは fields
を使います。
const express = require('express');
const fs = require('fs');
const multer = require('multer');
const app = express();
app.post(
'/upload',
multer({ dest: 'tmp/' }).fields([{ name: 'file1' }, { name: 'file2' }]),
(req, res) => {
const content1 = fs.readFileSync(req.files['file1'][0].path, 'utf-8');
const content2 = fs.readFileSync(req.files['file2'][0].path, 'utf-8');
res.send(content1 + content2);
});
app.listen('3000', () => {
console.log('Application started');
});
$ echo Hello > a.txt
$ echo Goodbye > b.txt
$ curl http://localhost:3000/upload -F 'file1=@a.txt' -F 'file2=@b.txt'
Hello
Goodbye