Large File Upload এবং Chunking টেকনিক দুটি গুরুত্বপূর্ণ কৌশল যা ওয়েব অ্যাপ্লিকেশনগুলোকে বড় ফাইল দ্রুত এবং সঠিকভাবে আপলোড করতে সহায়তা করে। সাধারণভাবে, ওয়েব ফর্মের মাধ্যমে ফাইল আপলোড করার সময় বড় ফাইল আপলোডে সমস্যা হতে পারে, যেমন সার্ভার টাইমআউট, নেটওয়ার্ক ডিসকানেকশন বা বড় ফাইল সাইজ সাপোর্ট না করা।
ফ্যালকন (Phalcon) ফ্রেমওয়ার্কে Large File Upload এবং Chunking Technique ব্যবহার করে আপনি বড় ফাইলের আপলোডের সমস্যা সমাধান করতে পারেন এবং ফাইলগুলোকে ছোট অংশে ভাগ করে আপলোড করতে পারেন, যা আরও নির্ভরযোগ্য এবং পারফরম্যান্স-বান্ধব।
Large File Upload এর জন্য Phalcon Configuration
Phalcon ফ্রেমওয়ার্কে বড় ফাইল আপলোড করার জন্য, আপনাকে কিছু কনফিগারেশন সেট করতে হবে। সাধারণত, PHP এর ইনিসেট কনফিগারেশনও সমর্থন করে, যেমন upload_max_filesize এবং post_max_size। তবে, ফ্যালকন দিয়ে ফাইল আপলোডের সময় অ্যাপ্লিকেশন লেভেলে কিছু কনফিগারেশন করতে পারেন যাতে বড় ফাইল সঠিকভাবে আপলোড হয়।
১. PHP Configuration for Large File Upload
প্রথমে, নিশ্চিত করুন যে PHP এর upload_max_filesize এবং post_max_size যথেষ্ট বড় সেট করা আছে। এটি php.ini ফাইলে কনফিগার করতে হবে:
upload_max_filesize = 50M
post_max_size = 50M
এখানে, 50M নির্দেশ করছে ৫০ মেগাবাইট পর্যন্ত ফাইল আপলোড করা যাবে।
২. Phalcon File Upload Controller
Phalcon ফ্রেমওয়ার্কে ফাইল আপলোড করতে Phalcon\Http\Request ক্লাস ব্যবহার করা হয়। এই ক্লাসের মাধ্যমে আপনি ফাইলগুলোকে অ্যাক্সেস করতে পারেন এবং আপলোড করতে পারেন।
use Phalcon\Mvc\Controller;
class FileUploadController extends Controller
{
public function uploadAction()
{
$files = $this->request->getUploadedFiles(); // Retrieve uploaded files
foreach ($files as $file) {
// Check file size
if ($file->getSize() > 50000000) { // 50MB
echo "File is too large.";
return;
}
// Save the file to a specific directory
$file->moveTo('/path/to/directory/' . $file->getName());
echo "File uploaded successfully!";
}
}
}
এখানে, getUploadedFiles() মেথড দিয়ে ফাইলগুলো রিট্রিভ করা হয়েছে এবং সাইজ চেক করার পর ফাইলটি সেভ করা হচ্ছে।
Chunking Technique
Chunking হলো একটি পদ্ধতি, যেখানে একটি বড় ফাইলকে ছোট ছোট অংশে ভাগ করা হয় এবং পরে সেগুলিকে একত্রিত করা হয়। এই পদ্ধতি নেটওয়ার্কের ব্যান্ডউইথ এবং সার্ভারের টাইমআউট সমস্যা কমাতে সাহায্য করে। বড় ফাইল আপলোড করতে, আপনি ফাইলটি ছোট অংশে ভাগ করতে পারেন এবং প্রতিটি অংশ আলাদা করে সার্ভারে পাঠাতে পারেন।
১. Client Side: JavaScript Chunking
ফাইলকে ছোট অংশে ভাগ করে আপলোড করার জন্য JavaScript ব্যবহার করা হয়। এখানে, আমরা HTML5 এর File API এবং XMLHttpRequest ব্যবহার করবো।
<input type="file" id="fileInput">
<button onclick="uploadFile()">Upload</button>
<script>
function uploadFile() {
var fileInput = document.getElementById('fileInput');
var file = fileInput.files[0];
var chunkSize = 1024 * 1024; // 1MB per chunk
var totalChunks = Math.ceil(file.size / chunkSize);
for (var i = 0; i < totalChunks; i++) {
var formData = new FormData();
var chunk = file.slice(i * chunkSize, (i + 1) * chunkSize);
formData.append('fileChunk', chunk, file.name);
formData.append('chunkIndex', i);
formData.append('totalChunks', totalChunks);
var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload-chunk', true);
xhr.onload = function () {
if (xhr.status === 200) {
console.log('Chunk ' + i + ' uploaded');
} else {
console.log('Error uploading chunk ' + i);
}
};
xhr.send(formData);
}
}
</script>
এখানে, ফাইলটি 1MB এর চাঙ্কে ভাগ করা হচ্ছে এবং প্রতিটি চাঙ্ক POST রিকোয়েস্টে সার্ভারে পাঠানো হচ্ছে।
২. Server Side: Phalcon Handling File Chunks
ফাইলের প্রতিটি চাঙ্ক সার্ভারে পাঠানোর পর, ফ্যালকন সেগুলি সংগ্রহ করে একত্রিত করবে। আমরা moveTo মেথড ব্যবহার করে চাঙ্কগুলো সংরক্ষণ করতে পারি।
use Phalcon\Mvc\Controller;
class FileUploadController extends Controller
{
public function uploadChunkAction()
{
$file = $this->request->getUploadedFiles()[0]; // Get the chunk
$chunkIndex = $this->request->getPost('chunkIndex');
$totalChunks = $this->request->getPost('totalChunks');
// Set the file storage directory
$uploadDirectory = "/path/to/upload/";
// Create directory if not exists
if (!is_dir($uploadDirectory)) {
mkdir($uploadDirectory, 0777, true);
}
$filePath = $uploadDirectory . "temp_" . $chunkIndex;
// Save the file chunk to a temporary location
$file->moveTo($filePath);
// Check if all chunks are uploaded
if ($chunkIndex == $totalChunks - 1) {
$this->combineChunks($uploadDirectory, $totalChunks);
}
echo "Chunk uploaded successfully!";
}
private function combineChunks($directory, $totalChunks)
{
$finalFile = fopen($directory . "final_file", 'wb');
for ($i = 0; $i < $totalChunks; $i++) {
$chunk = file_get_contents($directory . "temp_" . $i);
fwrite($finalFile, $chunk);
unlink($directory . "temp_" . $i); // Remove temporary chunk
}
fclose($finalFile);
echo "File combined successfully!";
}
}
এখানে, আমরা প্রতিটি চাঙ্ককে temp_ নামের ফাইল হিসেবে সংরক্ষণ করছি এবং যখন সমস্ত চাঙ্ক আপলোড হয়ে যাবে, তখন সেগুলিকে একত্রিত করা হচ্ছে এবং মূল ফাইল হিসেবে সংরক্ষণ করা হচ্ছে।
সুবিধা এবং প্রয়োগ
Large File Upload এবং Chunking Technique ব্যবহার করার বেশ কিছু সুবিধা রয়েছে:
- নেটওয়ার্কের উপর চাপ কমানো: ফাইল ছোট ছোট অংশে ভাগ করে আপলোড করার মাধ্যমে নেটওয়ার্ক ব্যান্ডউইথ ব্যবহার কম হয়।
- টাইমআউট সমস্যা কমানো: ছোট চাঙ্কের মাধ্যমে একসাথে বড় ফাইল আপলোড করা হয় না, যার ফলে টাইমআউট এর সম্ভাবনা কমে।
- ফাইল আপলোডের নির্ভরযোগ্যতা বৃদ্ধি: যদি কোনো চাঙ্ক আপলোড ব্যর্থ হয়, তবে শুধু সেই চাঙ্কটি পুনরায় পাঠানো হয়, পুরো ফাইল নয়।
- ফাইল সাইজের সীমাবদ্ধতা অতিক্রম করা: অনেক ওয়েব সার্ভার বড় ফাইল আপলোডে সীমাবদ্ধতা রাখে। Chunking পদ্ধতি দ্বারা আপনি এই সীমাবদ্ধতা অতিক্রম করতে পারেন।
সারাংশ
Phalcon ফ্রেমওয়ার্কে Large File Upload এবং Chunking Technique ব্যবহার করার মাধ্যমে আপনি সহজেই বড় ফাইলগুলো নিরাপদে এবং দ্রুত আপলোড করতে পারেন। ফাইলটি ছোট ছোট অংশে ভাগ করে আপলোডের মাধ্যমে সার্ভারের টাইমআউট এবং নেটওয়ার্ক ডিসকানেকশন সমস্যা কমিয়ে ফেলতে সাহায্য করে। ফ্যালকন এর সেশন হ্যান্ডলিং এবং কনফিগারেশন সুবিধার মাধ্যমে আপনি ফাইল আপলোড প্রক্রিয়াকে আরও নির্ভরযোগ্য এবং পারফরম্যান্স-বান্ধব করতে পারবেন।
Read more