1
0

multerをざっくり理解する

Posted at

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);
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0