ExpressJs

⌘K
  1. Home
  2. Docs
  3. ExpressJs
  4. Multer
  5. ফাইল আপলোড মিডলওয়্যার তৈরি করা

ফাইল আপলোড মিডলওয়্যার তৈরি করা

middleware নামে একটি ডিরেক্টরি তৈরি করুন এবং এর ভিতরে upload.js নামে একটি ফাইল তৈরি করুন। এই ফাইলে আমরা আমাদের আপলোড মিডলওয়্যার লিখব।

middleware/upload.js

const multer = require('multer'); // Multer মডিউল ইম্পোর্ট করা
const path = require('path'); // Path মডিউল ইম্পোর্ট করা

// ফাইলের নাম জেনারেট করার ফাংশন
const generateFilename = (originalFilename) => {
  // মূল ফাইলের নাম থেকে স্পেস সরিয়ে নতুন ফাইলের নাম তৈরি করা
  let newFilename = originalFilename.replace(/\s+/g, '_');

  // নতুন ফাইলের নামে বর্তমান তারিখ যোগ করা
  const currentDate = new Date();
  const dateString = currentDate.toISOString().split('T')[0];
  newFilename = dateString + '_' + newFilename;

  return newFilename;
};

// Multer স্টোরেজ কনফিগারেশন
const storage = multer.diskStorage({
  // ফাইল গুলো কোথায় সংরক্ষণ করা হবে তা নির্ধারণ
  destination: './uploads',
  // ফাইলের নাম কিভাবে তৈরি হবে তা নির্ধারণ
  filename: (req, file, cb) => {
    cb(null, generateFilename(file.originalname)); // নতুন ফাইল নাম জেনারেট করা
  }
});

// ফাইল ফিল্টার করার ফাংশন (ফাইল টাইপ যাচাই)
const fileFilter = (req, file, cb) => {
  // শুধুমাত্র jpeg এবং png ফাইলগুলো গ্রহণ করা হবে
  if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') {
    cb(null, true);
  } else {
    cb(new Error('Unsupported file type! Only JPEG and PNG are allowed.'), false);
  }
};

// Multer ইনস্ট্যান্স তৈরি করা
const upload = multer({
  storage: storage,
  limits: {
    fileSize: 1024 * 1024 * 5 // ফাইলের সর্বোচ্চ আকার 5MB নির্ধারণ করা
  },
  fileFilter: fileFilter // ফাইল টাইপ যাচাই করার জন্য ফিল্টার যোগ করা
});

// একাধিক ফাইল আপলোড করার জন্য Multer মিডলওয়্যার এক্সপোর্ট করা
module.exports = upload.array('images', 5); // একসাথে ৫টি ইমেজ আপলোড করা যাবে

মিডলওয়্যার ব্যবহার করে রুট তৈরি করা

server.js ফাইল তৈরি করুন এবং মিডলওয়্যার সহ একটি রুট সেটআপ করুন।

server.js

const express = require('express'); // Express.js মডিউল ইম্পোর্ট করা
const uploadMiddleware = require('./middleware/upload'); // আপলোড মিডলওয়্যার ইম্পোর্ট করা

const app = express(); // একটি Express অ্যাপ তৈরি করা
const port = 3000; // সার্ভার চলার পোর্ট নাম্বার

// বডি প্যারামিটার পার্স করার জন্য Express মিডলওয়্যার
app.use(express.urlencoded({ extended: true })); // ফর্ম ডেটা পার্স করা

// ফাইল আপলোড এবং বডি প্যারামিটার গ্রহণের জন্য রুট
app.post('/upload', uploadMiddleware, (req, res) => {
  // বডি প্যারামিটার থেকে name এবং email গ্রহণ করা
  const name = req.body.name;
  const email = req.body.email;

  // আপলোড করা ফাইলের তালিকা
  const files = req.files;

  // প্রতিক্রিয়া পাঠানো
  res.send(`Files uploaded successfully! Name: ${name}, Email: ${email}, Files: ${files.map(file => file.filename).join(', ')}`);
});

// কাস্টম এরর হ্যান্ডলার
app.use((err, req, res, next) => {
  if (err instanceof multer.MulterError) {
    // Multer এরর হলে
    res.status(400).send(`Multer Error: ${err.message}`);
  } else if (err) {
    // অন্য কোন এরর হলে
    res.status(400).send(`Error: ${err.message}`);
  } else {
    next();
  }
});

// সার্ভার শুরু করা
app.listen(port, () => {
  console.log(`Server running at http://localhost:${port}`);
});

HTML ফর্ম তৈরি করা

public ডিরেক্টরিতে একটি index.html ফাইল তৈরি করুন এবং নিচের HTML ফর্মটি যোগ করুন:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>File Upload</title>
</head>
<body>
  <h1>Upload Multiple Files</h1>
  <form action="/upload" method="post" enctype="multipart/form-data">
    <label for="name">Name:</label>
    <input type="text" name="name" id="name" required>
    <br>
    <label for="email">Email:</label>
    <input type="email" name="email" id="email" required>
    <br>
    <label for="images">Upload Images:</label>
    <input type="file" name="images" id="images" multiple required>
    <br>
    <button type="submit">Upload</button>
  </form>
</body>
</html>

How can we help?