Node.js File Uploads — Multer, Streams & Cloud Storage

Handle file uploads in Node.js: Multer for multipart forms, streaming large files, and cloud storage with S3.

Node.js Intermediate 📖 9 min

File Upload with Multer

const multer = require('multer');
const upload = multer({ dest: 'uploads/' });

// Single file
app.post('/api/upload', upload.single('avatar'), (req, res) => {
  res.json({ file: req.file });
});

// Multiple files
app.post('/api/upload/multiple', upload.array('photos', 5), (req, res) => {
  res.json({ files: req.files });
});

Cloud Storage with S3

const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3');

const s3 = new S3Client({ region: 'us-east-1' });

async function uploadToS3(file) {
  const key = `uploads/${Date.now()}_${file.originalname}`;
  await s3.send(new PutObjectCommand({
    Bucket: process.env.S3_BUCKET,
    Key: key,
    Body: file.buffer,
    ContentType: file.mimetype
  }));
  return `https://${process.env.S3_BUCKET}.s3.amazonaws.com/${key}`;
}

Streaming Large Files

const fs = require('fs');
const { pipeline } = require('stream/promises');

app.get('/api/download/:filename', async (req, res) => {
  const readStream = fs.createReadStream(`uploads/${req.params.filename}`);
  res.setHeader('Content-Disposition', `attachment; filename=${req.params.filename}`);
  await pipeline(readStream, res);
});

Ready to Level Up Your Coding Skills?

Join Coderz Club and learn to code with challenges, battles, and an AI mentor.

Join Coderz Club Free →