Comprehensive Guide to Busboy for Optimized Multer Setup

Introduction to Busboy

Busboy is a fast and efficient middleware used for handling HTML form file uploads in Node.js. It is actively used with platforms like Express, offering a simple way to process file data from streaming forms.

Setting up Busboy

  
    const express = require('express');
    const busboy = require('busboy');
    const path = require('path');
    const fs = require('fs');

    const app = express();

    app.post('/upload', (req, res) => {
      const bb = busboy({ headers: req.headers });

      bb.on('file', (name, file, info) => {
        const { filename, encoding, mimeType } = info;
        const saveTo = path.join(__dirname, 'uploads', path.basename(filename));
        file.pipe(fs.createWriteStream(saveTo));
      });

      bb.on('finish', () => {
        res.writeHead(200, { 'Connection': 'close' });
        res.end("File uploaded successfully!");
      });

      return req.pipe(bb);
    });

    app.listen(3000, () => {
      console.log('Server started on port 3000');
    });
  

Usage Example

Below is a complete example of a Node.js application using Express and Busboy for file upload handling:

  
    const express = require('express');
    const busboy = require('busboy');
    const fs = require('fs');
    const path = require('path');

    const app = express();

    app.post('/upload', (req, res) => {
      const bb = busboy({ headers: req.headers });

      bb.on('file', (name, file, info) => {
        const { filename, encoding, mimeType } = info;
        console.log(`File [${name}]: filename: %j, encoding: %j, mimeType: %j`, filename, encoding, mimeType);

        const saveTo = path.join(__dirname, 'uploads', path.basename(filename));
        file.pipe(fs.createWriteStream(saveTo));
      });

      bb.on('field', (name, val, info) => {
        console.log(`Field [${name}]: value: %j`, val);
      });

      bb.on('close', () => {
        console.log('Upload complete');
        res.writeHead(200, { 'Connection': 'close' });
        res.end("File uploaded!");
      });

      return req.pipe(bb);
    });

    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
  

More Busboy Events

Busboy emits several events to handle different stages of file upload and processing:

  • file – Emitted when a file field is encountered.
  • field – Emitted when a non-file field is encountered.
  • finish – Emitted when the entire multer is finished processing.
  • close – Emitted when the request finished closing.

Conclusion

Busboy provides a robust and efficient solution for handling file uploads in Node.js apps. Integrating it with Express allows for seamless and performant file processing. This guide covered the core functionalities and provided a comprehensive example to kickstart your development with Busboy.

Hash: 2a9af83d983d8dff397fefc03ef7cb874ecf6dd112b9c48e261c05105f224020

Leave a Reply

Your email address will not be published. Required fields are marked *