busboy vs formidable vs multer vs express-fileupload vs connect-multiparty vs connect-busboy
"ファイルアップロードライブラリ" npm パッケージ比較
1 年
busboyformidablemulterexpress-fileuploadconnect-multipartyconnect-busboy類似パッケージ:
ファイルアップロードライブラリとは?

ファイルアップロードライブラリは、Node.jsアプリケーションがHTTPリクエストを介してサーバーにファイルをアップロードするのを処理するためのツールです。これらのライブラリは、マルチパートフォームデータを解析し、アップロードされたファイルをストリームとして処理したり、一時的なストレージに保存したりします。これにより、ウェブアプリケーションはユーザーからのファイル入力を受け取り、データベースに保存したり、クラウドストレージにアップロードしたり、他の処理を行ったりすることができます。

npmのダウンロードトレンド
GitHub Starsランキング
統計詳細
パッケージ
ダウンロード数
Stars
サイズ
Issues
公開日時
ライセンス
busboy15,532,9142,903124 kB35--
formidable10,812,4917,102203 kB504ヶ月前MIT
multer6,374,39311,70927.6 kB269-MIT
express-fileupload375,0121,541116 kB237ヶ月前MIT
connect-multiparty78,786349-06年前MIT
connect-busboy43,7511554.57 kB0--
機能比較: busboy vs formidable vs multer vs express-fileupload vs connect-multiparty vs connect-busboy

ストリーミング処理

  • busboy:

    busboyは、ファイルをストリームとして処理するため、メモリ使用量を最小限に抑えながら大きなファイルを効率的にアップロードできます。

  • formidable:

    formidableは、ファイルをストリームとして処理し、アップロード中にリアルタイムでデータを処理できます。

  • multer:

    multerは、ファイルをストリーミングで処理しますが、アップロード前に一時的にメモリまたはディスクに保存します。

  • express-fileupload:

    express-fileuploadは、ストリーミング処理をサポートしていません。ファイルは一時的にメモリまたはディスクに保存されます。

  • connect-multiparty:

    connect-multipartyは、ストリーミング処理をサポートしていません。ファイルは一時的に保存されてから処理されます。

  • connect-busboy:

    connect-busboyは、busboyのストリーミング機能を活用し、ファイルをリアルタイムで処理できます。

ファイルサイズ制限

  • busboy:

    busboyは、ファイルサイズ制限を手動で実装する必要があります。

  • formidable:

    formidableは、ファイルサイズ制限を設定するためのオプションを提供します。

  • multer:

    multerは、ファイルサイズ制限を設定するためのシンプルなAPIを提供します。

  • express-fileupload:

    express-fileuploadは、ファイルサイズ制限を簡単に設定できるオプションを提供します。

  • connect-multiparty:

    connect-multipartyは、ファイルサイズ制限を設定できますが、ドキュメントは限られています。

  • connect-busboy:

    connect-busboyも同様に、ファイルサイズ制限は手動で設定する必要があります。

カスタムストレージ

  • busboy:

    busboyは、カスタムストレージロジックを実装するための柔軟性がありますが、組み込みのストレージ機能はありません。

  • formidable:

    formidableは、カスタムストレージロジックを実装するための柔軟性があります。

  • multer:

    multerは、カスタムストレージロジックを簡単に実装できるインターフェースを提供します。

  • express-fileupload:

    express-fileuploadは、カスタムストレージロジックを実装するためのフックを提供しますが、デフォルトでは一時的なストレージを使用します。

  • connect-multiparty:

    connect-multipartyは、ファイルを一時的なディレクトリに保存しますが、カスタムストレージロジックは提供されていません。

  • connect-busboy:

    connect-busboyは、busboyと同様に、カスタムストレージロジックを実装する必要があります。

使いやすさ

  • busboy:

    busboyは、ストリーミングAPIを提供しますが、使い方には慣れが必要です。

  • formidable:

    formidableは、強力な機能を提供しますが、使い方には少し学習が必要です。

  • multer:

    multerは、シンプルなAPIを提供し、使いやすさと柔軟性のバランスが取れています。

  • express-fileupload:

    express-fileuploadは、シンプルで直感的なAPIを提供し、設定が簡単です。

  • connect-multiparty:

    connect-multipartyは、シンプルなAPIを提供し、使いやすいですが、ドキュメントは限られています。

  • connect-busboy:

    connect-busboyは、busboyExpressアプリケーションに簡単に統合できます。

コード例

  • busboy:

    busboyを使用したファイルアップロードの例

    const Busboy = require('busboy');
    const fs = require('fs');
    const express = require('express');
    const app = express();
    
    app.post('/upload', (req, res) => {
      const busboy = new Busboy({ headers: req.headers });
      busboy.on('file', (fieldname, file, filename) => {
        const writeStream = fs.createWriteStream(`./uploads/${filename}`);
        file.pipe(writeStream);
      });
      busboy.on('finish', () => {
        res.send('ファイルアップロード完了');
      });
      req.pipe(busboy);
    });
    
    app.listen(3000, () => {
      console.log('サーバーがポート3000で起動');
    });
    
  • formidable:

    formidableを使用したファイルアップロードの例

    const express = require('express');
    const formidable = require('formidable');
    const fs = require('fs');
    const app = express();
    
    app.post('/upload', (req, res) => {
      const form = new formidable.IncomingForm();
      form.uploadDir = './uploads';
      form.on('fileBegin', (name, file) => {
        file.path = `${form.uploadDir}/${file.name}`;
      });
      form.on('end', () => {
        res.send('ファイルアップロード完了');
      });
      form.parse(req);
    });
    
    app.listen(3000, () => {
      console.log('サーバーがポート3000で起動');
    });
    
  • multer:

    multerを使用したファイルアップロードの例

    const express = require('express');
    const multer = require('multer');
    const fs = require('fs');
    const app = express();
    
    const storage = multer.diskStorage({
      destination: (req, file, cb) => {
        cb(null, './uploads');
      },
      filename: (req, file, cb) => {
        cb(null, file.originalname);
      }
    });
    const upload = multer({ storage });
    
    app.post('/upload', upload.single('file'), (req, res) => {
      res.send('ファイルアップロード完了');
    });
    
    app.listen(3000, () => {
      console.log('サーバーがポート3000で起動');
    });
    
  • express-fileupload:

    express-fileuploadを使用したファイルアップロードの例

    const express = require('express');
    const fileUpload = require('express-fileupload');
    const fs = require('fs');
    const app = express();
    
    app.use(fileUpload());
    
    app.post('/upload', (req, res) => {
      const file = req.files.file;
      const uploadPath = `./uploads/${file.name}`;
      file.mv(uploadPath, err => {
        if (err) return res.status(500).send(err);
        res.send('ファイルアップロード完了');
      });
    });
    
    app.listen(3000, () => {
      console.log('サーバーがポート3000で起動');
    });
    
  • connect-multiparty:

    connect-multipartyを使用したファイルアップロードの例

    const express = require('express');
    const multiparty = require('connect-multiparty');
    const fs = require('fs');
    const app = express();
    const multipartyMiddleware = multiparty();
    
    app.post('/upload', multipartyMiddleware, (req, res) => {
      const { files } = req;
      Object.keys(files).forEach(field => {
        const file = files[field];
        const writeStream = fs.createWriteStream(`./uploads/${file.originalFilename}`);
        fs.createReadStream(file.path).pipe(writeStream);
      });
      res.send('ファイルアップロード完了');
    });
    
    app.listen(3000, () => {
      console.log('サーバーがポート3000で起動');
    });
    
  • connect-busboy:

    connect-busboyを使用したファイルアップロードの例

    const express = require('express');
    const connectBusboy = require('connect-busboy');
    const fs = require('fs');
    const app = express();
    
    app.use(connectBusboy());
    
    app.post('/upload', (req, res) => {
      req.busboy.on('file', (fieldname, file, filename) => {
        const writeStream = fs.createWriteStream(`./uploads/${filename}`);
        file.pipe(writeStream);
      });
      req.busboy.on('finish', () => {
        res.send('ファイルアップロード完了');
      });
    });
    
    app.listen(3000, () => {
      console.log('サーバーがポート3000で起動');
    });
    
選び方: busboy vs formidable vs multer vs express-fileupload vs connect-multiparty vs connect-busboy
  • busboy:

    busboyは、ストリーミングAPIを提供する軽量なマルチパート解析ライブラリです。大きなファイルを効率的に処理する必要がある場合や、カスタムファイルアップロードロジックを実装したい場合に最適です。

  • formidable:

    formidableは、マルチパートフォームデータを解析し、ファイルをストリームとして処理するための強力なライブラリです。大きなファイルのアップロードやカスタム解析ロジックが必要な場合に適しています。

  • multer:

    multerは、Expressアプリケーション向けのミドルウェアで、マルチパートフォームデータを簡単に処理します。ファイルの保存先や名前をカスタマイズでき、シンプルなAPIを提供します。

  • express-fileupload:

    express-fileuploadは、Expressアプリケーション向けのシンプルで使いやすいファイルアップロードミドルウェアです。設定が簡単で、ファイルサイズ制限やアップロード進捗の追跡などの機能を提供します。

  • connect-multiparty:

    connect-multipartyは、マルチパートフォームデータを解析するためのミドルウェアです。複数のファイルフィールドやテキストフィールドを同時に処理する必要がある場合に便利ですが、ストリーミング処理はサポートしていません。

  • connect-busboy:

    connect-busboyは、busboyconnectおよびExpressミドルウェアとして統合します。既存のアプリケーションに簡単に統合でき、ストリーミング解析を利用したい場合に適しています。