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>