Multer একটি জনপ্রিয় এবং শক্তিশালী মিডলওয়্যার, যা ExpressJS অ্যাপে ফাইল আপলোড করার জন্য ব্যবহৃত হয়। এটি ফাইল আপলোডের প্রক্রিয়াটি সহজ এবং নিরাপদ করে তোলে। Multer HTTP POST রিকোয়েস্ট থেকে ফাইল সংরক্ষণ করে এবং বিভিন্ন কনফিগারেশন ও বৈশিষ্ট্য প্রদান করে, যেমন ফাইল সাইজ সীমা, ফাইল টাইপ যাচাই, এবং ফাইল স্টোরেজ কনফিগারেশন।
Multer কি এবং কেন ব্যবহার করবেন?
Multer হল একটি Node.js middleware যা ফাইল আপলোডের জন্য ব্যবহৃত হয়। এটি POST রিকোয়েস্টের মাধ্যমে আসা ফাইলগুলিকে হ্যান্ডল করতে সাহায্য করে। Multer সাধারণত multipart/form-data রিকোয়েস্ট হ্যান্ডল করতে সক্ষম, যা সাধারণত ফর্মের মাধ্যমে ফাইল আপলোডে ব্যবহৃত হয়।
Multer আপনাকে সুবিধা দেয়:
- ফাইল আপলোডের সময় ফাইল সাইজ যাচাই করা।
- ফাইল টাইপ যাচাই করা।
- আপলোড করা ফাইলগুলি সংরক্ষণ করা বা সেগুলোর নাম কাস্টমাইজ করা।
- স্টোরেজ কনফিগারেশন যেমন, ফাইল কোথায় সংরক্ষণ হবে ইত্যাদি।
Multer ইনস্টল করা
প্রথমে Multer ইনস্টল করতে হবে। নিচে কমান্ডটি ব্যবহার করে এটি ইনস্টল করতে পারবেন:
npm install multer --save
Multer ব্যবহার করে ফাইল আপলোড করা
১. Multer সেটআপ এবং কনফিগারেশন
এখন, Multer অ্যাপ্লিকেশনে সেটআপ এবং কনফিগার করা যাক। প্রথমে Express অ্যাপ্লিকেশন তৈরি করতে হবে।
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
const port = 3000;
// ফাইল স্টোরেজ কনফিগারেশন
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/'); // ফাইল কোথায় সংরক্ষণ হবে
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname)); // ফাইলের নাম কাস্টমাইজ করা
}
});
// Multer ইনস্ট্যান্স তৈরি
const upload = multer({ storage: storage });
// রুট রাউট
app.post('/upload', upload.single('file'), (req, res) => {
res.send(`File uploaded successfully: ${req.file.filename}`);
});
// সার্ভার শুরু
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
১.১. ব্যাখ্যা:
storage: Multer এর স্টোরেজ কনফিগারেশন যেখানে ফাইল কোথায় সংরক্ষণ হবে এবং ফাইলের নাম কিভাবে নির্ধারণ করা হবে তা উল্লেখ করা হয়েছে।destination: ফাইল সংরক্ষণের ফোল্ডার।filename: ফাইলের নাম কাস্টমাইজ করা হয়েছে যাতে ইউনিক হয়।
upload.single('file'):fileহল ফাইল ইনপুট ফিল্ডের নাম। একক ফাইল আপলোড করার জন্য এটি ব্যবহার করা হয়েছে।req.file: আপলোড করা ফাইলের তথ্য ধারণ করে।
১.২. ফাইল সংরক্ষণ করার জন্য ফোল্ডার তৈরি
আপনার অ্যাপে ফাইল আপলোডের জন্য একটি ফোল্ডার তৈরি করতে হবে, যেমন uploads/। আপনি নিজে এই ফোল্ডারটি তৈরি করতে পারেন অথবা Multer স্বয়ংক্রিয়ভাবে এটি তৈরি করবে যদি না থাকে।
mkdir uploads
২. ফাইল আপলোডের 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 a File</h1>
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file" required>
<button type="submit">Upload</button>
</form>
</body>
</html>
enctype="multipart/form-data": এটি ফর্মের মাধ্যমে ফাইল আপলোডের জন্য গুরুত্বপূর্ণ, যা ফাইল ডেটা সার্ভারে পাঠাতে ব্যবহৃত হয়।
৩. ফাইল টাইপ এবং সাইজ যাচাই করা
Multer ব্যবহার করে আপনি ফাইল টাইপ এবং সাইজ যাচাই করতে পারেন। উদাহরণস্বরূপ, শুধুমাত্র নির্দিষ্ট ধরনের ফাইল (যেমন JPEG, PNG) আপলোড করার অনুমতি দিন এবং সাইজ সীমাবদ্ধ করুন।
৩.১. ফাইল টাইপ যাচাই
const upload = multer({
storage: storage,
fileFilter: (req, file, cb) => {
const filetypes = /jpeg|jpg|png/;
const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
const mimetype = filetypes.test(file.mimetype);
if (mimetype && extname) {
return cb(null, true); // ফাইল টাইপ মিলে গেলে অনুমতি দিন
} else {
cb('Error: Only JPEG, PNG files are allowed!');
}
}
});
৩.২. ফাইল সাইজ সীমাবদ্ধ করা
const upload = multer({
storage: storage,
limits: { fileSize: 10 * 1024 * 1024 }, // 10MB সাইজ সীমা
fileFilter: (req, file, cb) => {
// ফাইল টাইপ যাচাই কোড এখানে থাকবে
}
});
এখানে, limits: { fileSize: 10 * 1024 * 1024 } দ্বারা ফাইল সাইজ 10MB পর্যন্ত সীমাবদ্ধ করা হয়েছে।
৪. একাধিক ফাইল আপলোড করা
Multer দিয়ে একাধিক ফাইল আপলোড করার জন্য upload.array() মেথড ব্যবহার করা হয়।
app.post('/upload-multiple', upload.array('files', 5), (req, res) => {
const uploadedFiles = req.files.map(file => file.filename);
res.send(`Successfully uploaded: ${uploadedFiles.join(', ')}`);
});
এখানে:
upload.array('files', 5): এটি পাঁচটি ফাইল পর্যন্ত আপলোড করতে সহায়তা করবে।filesহল HTML ফর্মের ফাইল ইনপুট ফিল্ডের নাম।req.files: একাধিক ফাইলের তথ্য ধারণ করবে।
৫. ফাইলের সাথে ডিরেক্টরি পারমিশন নিশ্চিত করা
প্রোডাকশন পরিবেশে, ফাইল আপলোডের জন্য ডিরেক্টরির পারমিশন সঠিকভাবে সেট করা গুরুত্বপূর্ণ। Multer স্বয়ংক্রিয়ভাবে uploads/ ফোল্ডারে ফাইল সংরক্ষণ করে, তবে নিশ্চিত করুন যে ফোল্ডারটি লেখার (write) পারমিশন পায়।
সারাংশ
Multer হল ExpressJS এর একটি শক্তিশালী মিডলওয়্যার যা ফাইল আপলোড ব্যবস্থাপনা সহজ করে তোলে। এটি ফাইল স্টোরেজ কনফিগারেশন, টাইপ এবং সাইজ যাচাই, একাধিক ফাইল আপলোড এবং নিরাপত্তা বৈশিষ্ট্য প্রদান করে। Multer এর মাধ্যমে আপনি সহজেই ব্যবহারকারীদের থেকে ফাইল সংগ্রহ করতে পারেন এবং এগুলিকে নিরাপদভাবে সংরক্ষণ করতে পারেন।
Read more