ExpressJS-এ ফাইল আপলোড করার জন্য Multer একটি জনপ্রিয় মডিউল। এটি ফাইল ডেটা প্রাপ্তির জন্য রিকোয়েস্টের বডি হ্যান্ডলিং করে এবং ফাইলটি সঠিকভাবে সার্ভারে সংরক্ষণ করতে সাহায্য করে। Multer মূলত multipart/form-data ফরম্যাটে ফাইল আপলোড করার জন্য ব্যবহৃত হয়।
এখানে, ExpressJS-এ Multer ব্যবহার করে ফাইল আপলোডের প্রক্রিয়া বিস্তারিতভাবে আলোচনা করা হবে।
১. Multer কি?
Multer একটি middleware যা ExpressJS অ্যাপ্লিকেশনে ফাইল আপলোডের কাজকে সহজ করে তোলে। এটি ফর্মের মাধ্যমে প্রাপ্ত ফাইলগুলোকে পার্স (parse) করে এবং তাদের সঠিক স্থানে সংরক্ষণ করতে সাহায্য করে।
Multer ব্যবহারের মাধ্যমে আপনি:
- ফাইল আপলোডের ডিরেক্টরি নির্ধারণ করতে পারেন।
- ফাইলের নাম পরিবর্তন করতে পারেন।
- ফাইল সাইজ সীমিত করতে পারেন।
- ফাইল ফরম্যাট চেক করতে পারেন।
২. Multer ইনস্টলেশন
Multer ইনস্টল করতে নিচের কমান্ডটি ব্যবহার করুন:
npm install multer
৩. Multer সেটআপ এবং কনফিগারেশন
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/'); // 'uploads/' ফোল্ডারে ফাইল সংরক্ষণ
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname)); // ফাইলের নাম পরিবর্তন করা
}
});
// Multer কনফিগারেশন
const upload = multer({
storage: storage,
limits: { fileSize: 10 * 1024 * 1024 }, // ফাইল সাইজ সীমিত করা (10MB)
fileFilter: (req, file, cb) => {
const filetypes = /jpeg|jpg|png|gif/; // অনুমোদিত ফাইল ফরম্যাট
const extname = filetypes.test(path.extname(file.originalname).toLowerCase());
const mimetype = filetypes.test(file.mimetype);
if (extname && mimetype) {
return cb(null, true);
} else {
cb(new Error('Only image files are allowed!'), false);
}
}
});
এখানে:
storage: ফাইল সংরক্ষণ করার জন্য স্টোরেজ কনফিগারেশন। এটি ডিরেক্টরি এবং ফাইল নাম নির্ধারণ করে।upload: Multer middleware, যা ফাইল সাইজ এবং টাইপ চেক করার জন্য কনফিগার করা হয়েছে।
৪. Express অ্যাপে Multer ব্যবহার করা
৪.১. একক ফাইল আপলোড
নিচে একটি উদাহরণ দেওয়া হলো, যেখানে একটি একক ফাইল আপলোড করার জন্য রাউট তৈরি করা হয়েছে।
app.post('/upload-single', upload.single('image'), (req, res) => {
if (!req.file) {
return res.status(400).send('No file uploaded');
}
res.send(`File uploaded successfully: ${req.file.filename}`);
});
এখানে:
upload.single('image'): এটি নির্দেশ করে যে ফর্মেimageনামে একটি ফাইল ফিল্ড থাকবে। Multer এই ফাইলটিকে প্রসেস করবে এবংreq.fileএ সংরক্ষণ করবে।req.file: আপলোড হওয়া ফাইলের তথ্য ধারণ করে, যেমন ফাইলের নাম, সাইজ, এবং মিমে টাইপ।
৪.২. একাধিক ফাইল আপলোড
একাধিক ফাইল আপলোডের জন্য upload.array() ব্যবহার করা হয়। নিচে এর একটি উদাহরণ দেওয়া হয়েছে:
app.post('/upload-multiple', upload.array('images', 5), (req, res) => {
if (!req.files) {
return res.status(400).send('No files uploaded');
}
res.send(`Successfully uploaded ${req.files.length} files`);
});
এখানে:
upload.array('images', 5): এটি নির্দেশ করে যে ফর্মেimagesনামে একাধিক ফাইল ফিল্ড থাকবে এবং সর্বোচ্চ ৫টি ফাইল আপলোড করা যাবে।req.files: এখানে আপলোড হওয়া ফাইলগুলোর একটি অ্যারে থাকবে।
৫. ফাইল আপলোডের জন্য HTML ফর্ম তৈরি
এখন, আমরা একটি HTML ফর্ম তৈরি করব যা ব্যবহারকারীকে ফাইল আপলোড করার অনুমতি দিবে।
৫.১. একক ফাইল আপলোডের জন্য HTML ফর্ম
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Single File Upload</title>
</head>
<body>
<h2>Upload a Single Image</h2>
<form action="/upload-single" method="POST" enctype="multipart/form-data">
<input type="file" name="image" accept="image/*" required>
<button type="submit">Upload</button>
</form>
</body>
</html>
৫.২. একাধিক ফাইল আপলোডের জন্য HTML ফর্ম
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Multiple File Upload</title>
</head>
<body>
<h2>Upload Multiple Images</h2>
<form action="/upload-multiple" method="POST" enctype="multipart/form-data">
<input type="file" name="images" accept="image/*" multiple required>
<button type="submit">Upload</button>
</form>
</body>
</html>
এখানে:
enctype="multipart/form-data": এটি ফর্মে ফাইল আপলোড করার জন্য প্রয়োজনীয় এনকোডিং টাইপ।multiple: এটি ব্যবহারকারীদের একাধিক ফাইল নির্বাচন করার অনুমতি দেয়।
৬. ফাইল আপলোড করার পর রেসপন্স প্রদান
একবার ফাইল আপলোড সম্পন্ন হলে, Multer ফাইলটির তথ্য req.file বা req.files এ সংরক্ষণ করে। আপনি এর মাধ্যমে ফাইলের নাম, সাইজ এবং অন্যান্য বৈশিষ্ট্য বের করতে পারেন এবং ব্যবহারকারীর কাছে রেসপন্স পাঠাতে পারেন।
সারাংশ
ExpressJS-এ Multer একটি শক্তিশালী এবং সহজ উপায় ফাইল আপলোডের জন্য। Multer এর মাধ্যমে আপনি একক এবং একাধিক ফাইল আপলোড, ফাইলের সাইজ এবং টাইপ চেক করতে পারেন, এবং ফাইলগুলো নির্দিষ্ট ডিরেক্টরিতে সংরক্ষণ করতে পারেন। Multer-এ কনফিগারেশন ও মিডলওয়্যার ব্যবহারের মাধ্যমে ফাইল আপলোডের প্রক্রিয়া খুবই সহজ এবং কার্যকর হয়ে ওঠে।
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 এর মাধ্যমে আপনি সহজেই ব্যবহারকারীদের থেকে ফাইল সংগ্রহ করতে পারেন এবং এগুলিকে নিরাপদভাবে সংরক্ষণ করতে পারেন।
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 অপশন ব্যবহার করতে পারেন। সঠিকভাবে ফাইল আপলোড এবং যাচাইয়ের মাধ্যমে একটি নিরাপদ এবং কার্যকরী ফাইল আপলোড সিস্টেম তৈরি করা সম্ভব।
ExpressJS এর মাধ্যমে আপনি সহজেই ফাইল সংরক্ষণ করতে এবং সার্ভার সাইডে ফাইল ম্যানিপুলেশন করতে পারেন। ফাইল আপলোড এবং প্রক্রিয়া করার জন্য ExpressJS সাধারণত কিছু এক্সটার্নাল মডিউল ব্যবহার করে। এখানে আমরা ফাইল আপলোড এবং সেগুলি সার্ভার সাইডে সংরক্ষণ ও ম্যানিপুলেট করার জন্য কিছু গুরুত্বপূর্ণ কৌশল আলোচনা করব।
১. ফাইল আপলোডের জন্য Multer ব্যবহার করা
ExpressJS এ ফাইল আপলোড করতে Multer একটি জনপ্রিয় মডিউল। এটি HTTP রিকোয়েস্টের মাধ্যমে ফাইল গ্রহণ করে এবং সেগুলি সার্ভারে সংরক্ষণ করে।
১.১. Multer ইনস্টল করা
প্রথমে Multer ইনস্টল করতে হবে:
npm install multer --save
১.২. Multer কনফিগারেশন
Multer ব্যবহার করার জন্য আপনাকে কিছু কনফিগারেশন সেট করতে হবে, যেমন আপলোড ফোল্ডার এবং ফাইলের সীমা। এখানে একটি উদাহরণ দেওয়া হল:
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
const port = 3000;
// ফাইল আপলোডের জন্য ফোল্ডার কনফিগারেশন
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/'); // ফাইল আপলোড হবে 'uploads' ফোল্ডারে
},
filename: function (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) => {
if (req.file) {
res.send('ফাইল আপলোড সফলভাবে হয়েছে!');
} else {
res.send('ফাইল আপলোডে ত্রুটি হয়েছে!');
}
});
// সার্ভার চালু করুন
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
এখানে upload.single('file') মেথডটি file নামক ফিল্ড থেকে একক ফাইল গ্রহণ করবে এবং সেটি সার্ভারে আপলোড করবে।
১.৩. ফাইল আপলোড ফর্ম তৈরি করা
এখন আপনি একটি HTML ফর্ম তৈরি করতে পারেন যেখানে ব্যবহারকারী ফাইল আপলোড করতে পারবেন:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ফাইল আপলোড</title>
</head>
<body>
<h1>ফাইল আপলোড করুন</h1>
<form action="/upload" method="POST" enctype="multipart/form-data">
<input type="file" name="file" />
<button type="submit">আপলোড করুন</button>
</form>
</body>
</html>
এখন, এই ফর্মের মাধ্যমে ব্যবহারকারী একটি ফাইল নির্বাচন করে সার্ভারে আপলোড করতে পারবেন।
২. ফাইল ম্যানিপুলেশন (Manipulation) করার জন্য fs মডিউল ব্যবহার করা
ExpressJS এ ফাইল সংরক্ষণ এবং ম্যানিপুলেশন করতে সাধারণত fs (File System) মডিউল ব্যবহৃত হয়, যা Node.js এর বিল্ট-ইন মডিউল। এর মাধ্যমে আপনি ফাইল তৈরি, পড়া, লেখা, ডিলিট করা এবং অন্যান্য ম্যানিপুলেশন করতে পারেন।
২.১. ফাইল তৈরি এবং লেখা
নিচের কোডটি একটি নতুন ফাইল তৈরি করবে এবং তাতে কিছু লেখা হবে:
const fs = require('fs');
// নতুন ফাইল তৈরি করে লেখা
fs.writeFile('uploads/example.txt', 'এটি একটি পরীক্ষামূলক ফাইল', (err) => {
if (err) throw err;
console.log('ফাইল সফলভাবে তৈরি হয়েছে!');
});
২.২. ফাইল পড়া
ফাইলের কন্টেন্ট পড়তে fs.readFile() মেথড ব্যবহার করা হয়:
fs.readFile('uploads/example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log('ফাইল কন্টেন্ট:', data);
});
২.৩. ফাইল ডিলিট করা
কোনো ফাইল ডিলিট করতে fs.unlink() মেথড ব্যবহার করতে হয়:
fs.unlink('uploads/example.txt', (err) => {
if (err) throw err;
console.log('ফাইলটি সফলভাবে ডিলিট হয়েছে!');
});
২.৪. ফোল্ডার তৈরি করা
নতুন ডিরেক্টরি (ফোল্ডার) তৈরি করতে fs.mkdir() মেথড ব্যবহার করা হয়:
fs.mkdir('uploads/new-folder', { recursive: true }, (err) => {
if (err) throw err;
console.log('নতুন ফোল্ডার তৈরি হয়েছে!');
});
৩. ফাইল আপলোডের নিরাপত্তা
ফাইল আপলোড করার সময় কিছু নিরাপত্তা সংক্রান্ত বিষয় মাথায় রাখা উচিত, যেমন:
৩.১. ফাইল টাইপ চেক করা
ফাইলের MIME টাইপ যাচাই করা উচিত, যাতে খারাপ বা অনুপযুক্ত ফাইল আপলোড করা না যায়:
const allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
const fileFilter = (req, file, cb) => {
if (allowedTypes.includes(file.mimetype)) {
cb(null, true);
} else {
cb(new Error('এটি অনুমোদিত ফাইল নয়!'), false);
}
};
const upload = multer({ storage: storage, fileFilter: fileFilter });
৩.২. ফাইল সাইজ সীমা নির্ধারণ করা
Multer এর মাধ্যমে ফাইল সাইজও সীমাবদ্ধ করা যায়। উদাহরণস্বরূপ, ফাইল সাইজ 10MB এর বেশি হতে পারবে না:
const upload = multer({
storage: storage,
limits: { fileSize: 10 * 1024 * 1024 } // 10MB
});
৩.৩. ফাইল নাম ইউনিক করা
ফাইল নামগুলিকে ইউনিক (অন্য কোনো ফাইলের সাথে একই নাম না হওয়া) রাখতে path.extname() এবং Date.now() ব্যবহার করা হয়, যেমন উপরের উদাহরণে দেখানো হয়েছে।
৪. ফাইল সার্ভিং করা
ExpressJS এ আপলোড করা ফাইল সরবরাহ করতে express.static() মিডলওয়্যার ব্যবহার করা হয়। উদাহরণস্বরূপ:
app.use('/uploads', express.static('uploads'));
এখন, আপনি http://localhost:3000/uploads/yourfile.jpg দিয়ে ফাইল অ্যাক্সেস করতে পারবেন।
সারাংশ
ExpressJS-এ ফাইল সংরক্ষণ এবং সার্ভার সাইডে ম্যানিপুলেশন খুবই সহজ। Multer মডিউল ব্যবহার করে ফাইল আপলোড করা এবং fs মডিউল দিয়ে ফাইল ম্যানিপুলেশন করা সম্ভব। ফাইলের নিরাপত্তা নিশ্চিত করতে ফাইল টাইপ এবং সাইজ চেক করা গুরুত্বপূর্ণ। এছাড়া, ফাইল সার্ভিং এবং ফোল্ডার ম্যানিপুলেশনও ExpressJS এর মাধ্যমে সহজে করা যায়।
ExpressJS অ্যাপ্লিকেশন তৈরি করার সময় নিরাপত্তা ব্যবস্থার গুরুত্ব অপরিসীম। সঠিক নিরাপত্তা ব্যবস্থা ছাড়া আপনার অ্যাপ্লিকেশন বিপদে পড়তে পারে, বিশেষত যদি আপনি ফাইল আপলোড বা ইউজার ইনপুট গ্রহণ করছেন। এই টিউটোরিয়ালে আমরা ExpressJS-এ নিরাপত্তা ব্যবস্থা এবং ফাইল আপলোড কনফিগারেশন সম্পর্কে আলোচনা করব।
১. ExpressJS-এ নিরাপত্তা ব্যবস্থা
ExpressJS অ্যাপ্লিকেশনকে নিরাপদ রাখতে কিছু সাধারণ নিরাপত্তা ব্যবস্থা অনুসরণ করা উচিত। এগুলোর মধ্যে রয়েছে HTTP হেডার সঠিকভাবে কনফিগার করা, ইনপুট স্যানিটাইজেশন, এবং অনাকাঙ্ক্ষিত অ্যাক্সেস সীমিত করা।
১.১. Helmet ব্যবহার করা
Helmet হলো একটি জনপ্রিয় ExpressJS মডিউল যা HTTP হেডারে নিরাপত্তা সংক্রান্ত সেটিংস যোগ করে। এটি বিভিন্ন ধরনের নিরাপত্তা রক্ষাকারী হেডার অ্যাড করে, যেমন Content Security Policy (CSP), X-Frame-Options, Strict-Transport-Security, এবং আরো অনেক কিছু।
Helmet ইনস্টল করতে:
npm install helmet --save
এবং ExpressJS অ্যাপে Helmet কনফিগার করা:
const express = require('express');
const helmet = require('helmet');
const app = express();
// Helmet ব্যবহার করা
app.use(helmet());
// অ্যাপ্লিকেশন চালু করা
app.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});
এখানে, app.use(helmet()) কোডটি HTTP হেডারগুলিতে নিরাপত্তা সেটিংস যুক্ত করবে। এটি Cross-Site Scripting (XSS), Clickjacking, এবং অন্যান্য আক্রমণ প্রতিরোধে সাহায্য করে।
১.২. CORS (Cross-Origin Resource Sharing) কনফিগারেশন
CORS কনফিগারেশন দ্বারা আপনি নির্ধারণ করতে পারবেন কোন ডোমেইন থেকে আপনার অ্যাপ্লিকেশনে রিকোয়েস্ট আসবে। ExpressJS-এ CORS কনফিগার করতে cors মডিউল ব্যবহার করা হয়।
CORS ইনস্টল করতে:
npm install cors --save
এবং ExpressJS অ্যাপে CORS কনফিগার করা:
const cors = require('cors');
app.use(cors({
origin: 'http://alloweddomain.com' // শুধু এই ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করা হবে
}));
এখানে:
cors(): CORS কনফিগারেশন যুক্ত করে, যাতে শুধু নির্দিষ্ট ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করা হয়।
১.৩. ইনপুট স্যানিটাইজেশন
ইনপুট স্যানিটাইজেশন এবং ভ্যালিডেশন হল সুরক্ষা ব্যবস্থার অংশ, যা ইউজার ইনপুট থেকে ম্যালিসিয়াস ডেটা বা স্ক্রিপ্ট ফিল্টার করে। এজন্য express-validator ব্যবহার করা যেতে পারে।
npm install express-validator --save
এবং ইনপুট ভ্যালিডেশন:
const { body, validationResult } = require('express-validator');
app.post('/register',
body('email').isEmail(),
body('password').isLength({ min: 5 }),
(req, res) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
// ইউজার রেজিস্ট্রেশন কোড
}
);
এখানে:
body('email').isEmail(): ইউজারের ইনপুট ঠিকমতো ইমেইল ফরম্যাটে আছে কিনা তা চেক করা হয়।body('password').isLength({ min: 5 }): পাসওয়ার্ডের দৈর্ঘ্য কমপক্ষে ৫ ক্যারেক্টার হতে হবে।
২. ExpressJS-এ ফাইল আপলোড কনফিগারেশন
ফাইল আপলোডের জন্য ExpressJS এ জনপ্রিয় মডিউল multer ব্যবহার করা হয়। এটি ফাইল ডেটা হ্যান্ডল করার জন্য সহজ এবং কার্যকরী।
২.১. Multer ইনস্টল করা
npm install multer --save
২.২. Multer কনফিগার করা
Multer ব্যবহার করার জন্য প্রথমে আপনার ফাইল আপলোড করার জন্য ডিরেক্টরি এবং কনফিগারেশন সেট করতে হবে। এরপর, আপনি ফাইল আপলোড করার জন্য রাউট তৈরি করবেন।
const multer = require('multer');
const path = require('path');
// ফাইল স্টোরেজ কনফিগারেশন
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('ফাইল সফলভাবে আপলোড করা হয়েছে');
});
এখানে:
destination: ফাইলটি কোথায় সংরক্ষিত হবে তা নির্ধারণ করে।filename: ফাইলের নাম কাস্টমাইজ করা যায় (এখানে আমরা বর্তমান সময় ব্যবহার করেছি নামের সাথে)।upload.single('file'): এটি একক ফাইল আপলোডের জন্য ব্যবহৃত হচ্ছে। এখানে'file'হলো ফর্ম ফিল্ডের নাম।
২.৩. মাল্টিপল ফাইল আপলোড
যদি আপনি একাধিক ফাইল আপলোড করতে চান, তবে upload.array() ব্যবহার করতে পারেন:
app.post('/multiple-upload', upload.array('files', 5), (req, res) => {
res.send('মাল্টিপল ফাইল সফলভাবে আপলোড করা হয়েছে');
});
এখানে:
upload.array('files', 5): এখানে'files'ফর্ম ফিল্ডের নাম এবং5হচ্ছে সর্বোচ্চ ফাইল আপলোডের সংখ্যা।
৩. ফাইল আপলোডের সীমা নির্ধারণ
ফাইলের আকার সীমাবদ্ধ করতে limits কনফিগার করা যায়:
const upload = multer({
storage: storage,
limits: { fileSize: 10 * 1024 * 1024 } // 10MB এর বেশি ফাইল আপলোড হতে দেবে না
});
এখানে:
limits: { fileSize: 10 * 1024 * 1024 }: ফাইলের আকার সর্বোচ্চ ১০MB হতে পারে।
৪. ত্রুটি হ্যান্ডলিং
ফাইল আপলোডের সময় ত্রুটি হ্যান্ডলিংও গুরুত্বপূর্ণ। আপনি যদি ফাইলের আকার, প্রকার বা অন্যান্য সীমা অতিক্রম করেন, তবে আপনাকে একটি ত্রুটি বার্তা প্রদান করতে হবে।
app.post('/upload', upload.single('file'), (req, res) => {
res.send('ফাইল সফলভাবে আপলোড করা হয়েছে');
}, (error, req, res, next) => {
res.status(500).send('ফাইল আপলোডে ত্রুটি হয়েছে: ' + error.message);
});
এখানে:
error.message: ফাইল আপলোডের ত্রুটি বার্তা প্রদান করা হচ্ছে।
সারাংশ
ExpressJS অ্যাপ্লিকেশনে নিরাপত্তা এবং ফাইল আপলোড কনফিগারেশন অত্যন্ত গুরুত্বপূর্ণ। Helmet এবং CORS ব্যবহারের মাধ্যমে নিরাপত্তা নিশ্চিত করা যায়, এবং express-validator দ্বারা ইনপুট স্যানিটাইজেশন করা সম্ভব। ফাইল আপলোডের জন্য Multer মডিউল ব্যবহার করা হয়, যা সহজেই ফাইল সংরক্ষণ এবং সীমাবদ্ধতা নির্ধারণ করতে সহায়তা করে।
Read more