ExpressJS অ্যাপে multiple file upload এবং file validation পরিচালনা করার জন্য কিছু জনপ্রিয় প্যাকেজ রয়েছে, যেমন multer। multer হল একটি middleware যা ব্যবহারকারীদের একাধিক ফাইল আপলোড করার সুবিধা দেয় এবং ফাইলগুলোর বৈধতা পরীক্ষা করার জন্য সঠিক কনফিগারেশন প্রদান করে।
১. Multer কি?
Multer হল একটি Node.js middleware যা ফর্ম ডেটার সাথে ফাইল ডেটা (multipart/form-data) প্রসেস করতে ব্যবহৃত হয়। এটি সাধারণত ফাইল আপলোডের জন্য ব্যবহৃত হয় এবং ExpressJS অ্যাপে ফাইলগুলি সার্ভারে সংরক্ষণ করতে সহায়তা করে। multer ব্যবহার করে আপনি ফাইলের সাইজ, টাইপ এবং নামের ভিত্তিতে যাচাইকরণ (validation) করতে পারেন।
২. Multer ইনস্টলেশন এবং কনফিগারেশন
প্রথমে, আপনাকে multer প্যাকেজটি ইনস্টল করতে হবে:
npm install multer
এরপর ExpressJS অ্যাপে multer ব্যবহারের জন্য সেটআপ করতে হবে।
২.১. Multer কনফিগারেশন
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
// ফাইল সেভ করার লোকেশন এবং ফাইল নাম কনফিগারেশন
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'uploads/'); // ফাইল কোথায় সেভ হবে
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname)); // ফাইলের নাম পরিবর্তন করা
}
});
// ফাইল আপলোডের সীমাবদ্ধতা
const fileFilter = (req, file, cb) => {
// ফাইল টাইপ চেক করা (এখানে ছবি অনুমোদিত)
const allowedTypes = /jpeg|jpg|png|gif/;
const mimeType = allowedTypes.test(file.mimetype);
const extName = allowedTypes.test(path.extname(file.originalname).toLowerCase());
if (mimeType && extName) {
return cb(null, true); // ফাইল অনুমোদিত
} else {
cb(new Error('Invalid file type! Only images are allowed.'));
}
};
// Multer middleware সেট করা
const upload = multer({
storage: storage,
limits: { fileSize: 1024 * 1024 * 5 }, // সর্বোচ্চ ফাইল সাইজ 5MB
fileFilter: fileFilter
});
app.use(express.urlencoded({ extended: true }));
// ফাইল আপলোড করার রাউট
app.post('/upload', upload.array('files', 3), (req, res) => {
if (!req.files) {
return res.status(400).send('No files uploaded.');
}
res.send(`Files uploaded: ${req.files.length}`);
});
// সার্ভার চালু করা
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
এখানে:
storage: ফাইলের সেভ করার লোকেশন এবং ফাইলের নাম কনফিগার করে।fileFilter: ফাইলের টাইপ যাচাই করে এবং শুধু নির্দিষ্ট টাইপ (এখানে ছবি) অনুমোদন করে।upload.array('files', 3): এটিfilesনামে একাধিক ফাইল আপলোডের অনুমতি দেয়, যেখানে সর্বোচ্চ ৩টি ফাইল আপলোড করা যাবে।
৩. Multiple File Upload
একাধিক ফাইল আপলোড করার জন্য multer এর upload.array() ফাংশন ব্যবহার করা হয়। এখানে দুটি প্যারামিটার প্রদান করা হয়:
- Field name: ফর্মের
inputএলিমেন্টেরnameঅ্যাট্রিবিউটের মান। - Maximum number of files: কতটি ফাইল সর্বোচ্চ আপলোড করা যাবে।
৩.১. উদাহরণ: একাধিক ফাইল আপলোড
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="files" multiple>
<button type="submit">Upload Files</button>
</form>
এখানে, multiple অ্যাট্রিবিউটটি ব্যবহার করা হয়েছে, যা ব্যবহারকারীকে একাধিক ফাইল সিলেক্ট করার সুযোগ দেয়।
৪. File Validation
ফাইল আপলোড করার সময় সঠিক ফাইলের ধরন এবং আকার যাচাই করা অত্যন্ত গুরুত্বপূর্ণ। Multer ফাইল টাইপ, সাইজ এবং অন্যান্য কাস্টম বৈশিষ্ট্য যাচাই করতে সাহায্য করে।
৪.১. ফাইল টাইপ যাচাই
const allowedTypes = /jpeg|jpg|png/; // ছবি ফাইলের অনুমোদিত টাইপ
const mimeType = allowedTypes.test(file.mimetype);
const extName = allowedTypes.test(path.extname(file.originalname).toLowerCase());
if (mimeType && extName) {
return cb(null, true); // অনুমোদিত ফাইল
} else {
cb(new Error('Invalid file type! Only images are allowed.'));
}
এখানে:
file.mimetype: ফাইলের MIME টাইপ চেক করা হয়।path.extname(): ফাইলের এক্সটেনশন চেক করা হয়।
৪.২. ফাইল সাইজ যাচাই
limits: { fileSize: 1024 * 1024 * 5 } // 5MB পর্যন্ত ফাইল অনুমোদিত
এখানে, fileSize অপশন দিয়ে সর্বোচ্চ ফাইল সাইজ 5MB নির্ধারণ করা হয়েছে।
৫. Error Handling
ফাইল আপলোডের সময় যদি কোনো ত্রুটি ঘটে, তাহলে তা সুন্দরভাবে হ্যান্ডেল করা উচিত।
app.use((err, req, res, next) => {
if (err instanceof multer.MulterError) {
// Multer এর ত্রুটি হ্যান্ডলিং
return res.status(500).send(`Multer error: ${err.message}`);
} else if (err) {
// অন্য কোনো ত্রুটি হ্যান্ডলিং
return res.status(500).send(`Error: ${err.message}`);
}
next();
});
এখানে, multer.MulterError দিয়ে Multer সম্পর্কিত ত্রুটি ধরা হয়, এবং অন্য সাধারণ ত্রুটিগুলোও আলাদা করে হ্যান্ডেল করা হয়।
৬. Multiple File Upload: গুরুত্বপূর্ণ বিষয়সমূহ
| Feature | Description |
|---|---|
| Multiple Files | upload.array('files', maxCount) ব্যবহার করে একাধিক ফাইল আপলোড করা যায়। |
| File Size Limit | limits: { fileSize: sizeInBytes } দিয়ে সর্বোচ্চ ফাইল সাইজ নির্ধারণ করা যায়। |
| File Type Validation | fileFilter ফাংশন ব্যবহার করে ফাইলের টাইপ যাচাই করা হয়। |
| Error Handling | ফাইল আপলোডের সময় ত্রুটি হ্যান্ডলিং করা হয়, যেমন ফাইল সাইজ বা টাইপের ভুল। |
| Storage Configuration | diskStorage বা memoryStorage ব্যবহার করে ফাইলের সংরক্ষণ পদ্ধতি কনফিগার করা যায়। |
সারাংশ
ExpressJS অ্যাপ্লিকেশনগুলোতে একাধিক ফাইল আপলোড করার জন্য multer middleware অত্যন্ত উপকারী। এটি ফাইল টাইপ এবং সাইজ যাচাই করার মাধ্যমে নিরাপদভাবে ফাইল আপলোড পরিচালনা করতে সাহায্য করে। multer এর upload.array() ফাংশন ব্যবহার করে আপনি একাধিক ফাইল আপলোড করতে পারেন এবং সেগুলোর বৈধতা যাচাই করতে fileFilter এবং limits অপশন ব্যবহার করতে পারেন। সঠিকভাবে ফাইল আপলোড এবং যাচাইয়ের মাধ্যমে একটি নিরাপদ এবং কার্যকরী ফাইল আপলোড সিস্টেম তৈরি করা সম্ভব।
Read more