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