ফাইল ট্রান্সফার একটি সাধারণ কাজ যা রিয়েল-টাইম অ্যাপ্লিকেশনে ব্যবহৃত হয়। Socket.IO ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্রুত এবং নিরাপদভাবে ফাইল পাঠানো সম্ভব। এখানে একটি উদাহরণ দেওয়া হলো যেখানে Node.js এবং Socket.IO ব্যবহার করা হয়েছে, এবং ফাইল ট্রান্সফারের জন্য কিছু নিরাপত্তা ব্যবস্থা যুক্ত করা হয়েছে।
ফাইল ট্রান্সফার এবং নিরাপত্তা ব্যবস্থা
- ফাইল সাইজ সীমাবদ্ধতা: বড় সাইজের ফাইল আপলোড প্রতিরোধ করতে ফাইল সাইজ সীমাবদ্ধ করা।
- ফাইল ধরনের যাচাই: শুধুমাত্র অনুমোদিত ফাইল টাইপ (যেমন ইমেজ, পিডিএফ) আপলোড করতে দেওয়া।
- ভাইরাস স্ক্যানিং: ফাইলটি সিস্টেমে সংরক্ষণ করার আগে ভাইরাস স্ক্যান করা।
- HTTPS ব্যবহার: নিরাপদ যোগাযোগের জন্য HTTPS ব্যবহার করা।
- অথেনটিকেশন এবং অথোরাইজেশন: শুধুমাত্র অথেনটিকেটেড ব্যবহারকারীরা ফাইল আপলোড বা ডাউনলোড করতে পারবে।
Step 1: Node.js এবং প্রয়োজনীয় প্যাকেজ ইনস্টলেশন
প্রথমে, Node.js প্রজেক্ট তৈরি করুন এবং প্রয়োজনীয় প্যাকেজ ইনস্টল করুন।
Node.js প্রজেক্ট তৈরি করা:
mkdir file-transfer-app cd file-transfer-app npm init -yপ্রয়োজনীয় প্যাকেজ ইনস্টল করা:
npm install express socket.io multer
- Express: HTTP রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য।
- Socket.IO: রিয়েল-টাইম যোগাযোগের জন্য।
- Multer: ফাইল আপলোড হ্যান্ডলিংয়ের জন্য।
Step 2: সার্ভার সাইড কোড (Node.js, Express, Socket.IO)
এখন server.js ফাইল তৈরি করা হবে যাতে ফাইল ট্রান্সফার এবং নিরাপত্তা ব্যবস্থা যুক্ত থাকবে।
server.js:
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const multer = require('multer');
const fs = require('fs');
// Express অ্যাপ এবং HTTP সার্ভার তৈরি
const app = express();
const server = http.createServer(app);
const io = socketIo(server);
// Multer কনফিগারেশন (ফাইল আপলোড)
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, './uploads'); // ফাইল আপলোডের ডিরেক্টরি
},
filename: (req, file, cb) => {
cb(null, file.originalname); // মূল ফাইল নাম সংরক্ষণ করা
}
});
// ফাইল সাইজ এবং টাইপ যাচাই করা
const fileFilter = (req, file, cb) => {
const allowedTypes = /jpeg|jpg|png|gif|pdf/;
const mimeType = allowedTypes.test(file.mimetype);
const extname = allowedTypes.test(file.originalname.split('.').pop());
if (mimeType && extname) {
return cb(null, true);
} else {
cb(new Error('অনুমোদিত ফাইল টাইপ নয়! শুধুমাত্র JPEG, PNG, GIF এবং PDF অনুমোদিত.'));
}
};
const upload = multer({
storage,
limits: { fileSize: 5 * 1024 * 1024 }, // ৫MB ফাইল সাইজের সীমা
fileFilter
});
// স্ট্যাটিক ফাইল সার্ভ করা (uploads ডিরেক্টরি)
app.use(express.static('uploads'));
// ফাইল আপলোডের জন্য রাউট
app.post('/upload', upload.single('file'), (req, res) => {
res.send({ message: 'ফাইল সফলভাবে আপলোড হয়েছে!', filePath: `/uploads/${req.file.filename}` });
});
// Socket.IO কানেকশন এবং রিয়েল-টাইম ফাইল ট্রান্সফার
io.on('connection', (socket) => {
console.log('একজন ব্যবহারকারী সংযুক্ত হয়েছে');
socket.on('upload-file', (fileData) => {
console.log('ফাইল পাওয়া গেছে:', fileData.name);
// ফাইলটি সেভ করা
fs.writeFileSync(`./uploads/${fileData.name}`, fileData.data, 'base64');
io.emit('file-uploaded', { message: 'ফাইল সফলভাবে আপলোড হয়েছে!', fileName: fileData.name });
});
socket.on('disconnect', () => {
console.log('ব্যবহারকারী ডিসকানেক্ট হয়েছে');
});
});
// সার্ভার চালু করা
server.listen(3000, () => {
console.log('সার্ভার http://localhost:3000 এ চলছে');
});- Multer: এখানে Multer ব্যবহার করে ফাইল আপলোডের জন্য কনফিগারেশন করা হয়েছে। আমরা ফাইলের টাইপ যাচাই করেছি এবং ৫MB ফাইল সাইজের সীমা নির্ধারণ করেছি।
- Socket.IO: Socket.IO ব্যবহার করে ক্লায়েন্ট থেকে ফাইল আপলোড করা হলে সার্ভার সেই ফাইলটি
uploadsডিরেক্টরিতে সংরক্ষণ করে এবং সকল কানেক্টেড ক্লায়েন্টকেfile-uploadedবার্তা পাঠায়।
Step 3: ক্লায়েন্ট সাইড কোড (HTML, CSS, JavaScript)
এখন index.html ফাইল তৈরি করা হবে, যা ব্যবহারকারীদের ফাইল আপলোড করার অনুমতি দেবে এবং সার্ভারের কাছ থেকে লাইভ আপডেট পাবে।
public/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ফাইল ট্রান্সফার অ্যাপ</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
input[type="file"] { margin-bottom: 10px; }
</style>
</head>
<body>
<h2>ফাইল ট্রান্সফার</h2>
<input type="file" id="fileInput" />
<button onclick="uploadFile()">আপলোড করুন</button>
<ul id="fileList"></ul>
<script src="/socket.io/socket.io.js"></script>
<script>
const socket = io();
// ফাইল আপলোড করার ফাংশন
function uploadFile() {
const fileInput = document.getElementById('fileInput');
const file = fileInput.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(event) {
const fileData = {
name: file.name,
data: event.target.result.split(',')[1] // Base64 এনকোডেড ডেটা
};
socket.emit('upload-file', fileData);
};
reader.readAsDataURL(file);
} else {
alert('দয়া করে একটি ফাইল নির্বাচন করুন');
}
}
// ফাইল আপলোড সফল হলে লাইভ আপডেট
socket.on('file-uploaded', (data) => {
const fileList = document.getElementById('fileList');
const listItem = document.createElement('li');
listItem.textContent = `ফাইল আপলোড হয়েছে: ${data.fileName}`;
fileList.appendChild(listItem);
});
</script>
</body>
</html>- ফাইল আপলোড: ক্লায়েন্ট ফাইল সিলেক্ট করার পর, ফাইলটি base64 এনকোডিং ব্যবহার করে সার্ভারে পাঠানো হয়।
- লাইভ আপডেট: সার্ভার থেকে আসা
file-uploadedবার্তা ক্লায়েন্ট সাইডে দেখানো হয়।
Step 4: নিরাপত্তা ব্যবস্থা
নিরাপদ ফাইল ট্রান্সফারের জন্য কিছু নিরাপত্তা ব্যবস্থা:
- ফাইল টাইপ যাচাই:
- Multer ব্যবহারের মাধ্যমে শুধুমাত্র নির্দিষ্ট ফাইল টাইপ (যেমন JPEG, PNG, PDF) অনুমোদিত করা হয়েছে।
- ফাইল সাইজ সীমাবদ্ধতা:
- ফাইলের সাইজ ৫MB এর মধ্যে সীমাবদ্ধ রাখা হয়েছে।
- ভাইরাস স্ক্যানিং:
- ফাইলটি সেভ করার আগে, এটা স্ক্যান করা উচিত যেন কোন ম্যালওয়্যার বা ভাইরাস না থাকে। আপনি ClamAV বা অন্য কোনো ভাইরাস স্ক্যানিং টুল ব্যবহার করতে পারেন।
- HTTPS:
- প্রোডাকশন পরিবেশে, ফাইল ট্রান্সফার করার সময় HTTPS ব্যবহার করুন। এতে ডেটা এনক্রিপ্ট হয়ে সুরক্ষিতভাবে ট্রান্সফার হবে।
- অথেনটিকেশন:
- ফাইল আপলোড করার আগে, ইউজারের অথেনটিকেশন নিশ্চিত করুন
। JWT টোকেন বা সেশন ব্যবস্থাপনা ব্যবহার করে ইউজারকে অথেনটিকেট করুন।
Step 5: Running the Application
সার্ভার চালু করুন:
node server.js- ব্রাউজারে অ্যাপ্লিকেশন দেখুন:
- আপনার ব্রাউজারে http://localhost:3000 এ গিয়ে ফাইল আপলোড করুন।
সারসংক্ষেপ
এটি একটি বেসিক ফাইল ট্রান্সফার অ্যাপ্লিকেশন যা Socket.IO এবং Multer ব্যবহার করে তৈরি করা হয়েছে। ফাইল সাইজ সীমাবদ্ধতা, টাইপ যাচাই, এবং ভাইরাস স্ক্যানিংসহ নিরাপত্তা ব্যবস্থা অন্তর্ভুক্ত করা হয়েছে। এই সিস্টেমটি real-time file transfer এবং real-time notifications প্রদান করে, এবং HTTPS, অথেনটিকেশন এবং ভাইরাস স্ক্যানিং সহ নিরাপদভাবে ফাইল ট্রান্সফার করা সম্ভব।
Read more