multerとは
- Node.jsのミドルウェア
- ファイルのアップロードを簡単に処理する
そもそもファイルのアップロードとは
- HTTP送信しただけではアップロードとは実質的に言えない
- その後のサーバーサイド上で行う処理も含めてアップロードと認識する
- この部分をmulterで行う
使い方
インストール
npm install multer
Node.js
const multer = require("multer");
// multerの設定
const multerMemoryStorage = multer.memoryStorage(); // ファイルをメモリに保存
const multerUpload = multer({ storage: multerMemoryStorage }); // multerインスタンスの作成
router.post(
"/upload",
multerUpload.single("markdown"),
async (req, res, next) => {
const buffer = req.file.buffer;
}
);
ざっくりと解説
const multerMemoryStorage = multer.memoryStorage(); // ファイルをメモリに保存
multerでは保存先をディスクまたはメモリに指定できます。
ここでは特にディスクに保存する必要もなかったので、簡単に使用できるメモリを指定しました。
const multerUpload = multer({ storage: multerMemoryStorage }); // multerインスタンスの作成
上で指定した保存方法を使用してmulterインスタンスを作成してます。
これで実際にmulterが使えるようになります。
router.post(
"/upload",
multerUpload.single("markdown"),
async (req, res, next) => {
const buffer = req.file.buffer; // ファイルの内容を取得
}
);
multerはミドルウェアなのでこのような書き方になります。コールバック関数の中に書くといったことはできません。
multerUpload.single("markdown"),
今回は一つのmarkdownをアップロードするので、このようにしました。
そのほかにアップロードするメソッドは以下のようなものがあります。
// 単一のファイル
multerUpload.single('file');
// 複数のファイル
multerUpload.array('files', 10);
// 指定された複数の種類のファイル
multerUpload.fields([
{ name: 'photos', maxCount: 3 },
{ name: 'documents', maxCount: 2 }
]);
// ファイルなしのテキストデータ
multerUpload.none();
// すべてのファイル
multerUpload.any();
async (req, res, next) => {
const buffer = req.file.buffer;
}
req.file.bufferの中にファイルのコンテンツが格納されています。
これでファイルの保存や処理ができるようになりました。
補足
上でmarkdownと指定している箇所がありますが、これはフロントで指定した名前のことです。
const formData = new FormData();
formData.append("markdown", file);