Custom Drag and Drop ব্যবহার করে ফাইল আপলোড

Web Development - এক্সটিজেএস (ExtJS) - ExtJS Drag and Drop Functionalities |
1

Drag and Drop (DND) ফিচার ব্যবহার করে ফাইল আপলোড একটি শক্তিশালী এবং ইন্টারঅ্যাকটিভ পদ্ধতি, যা ব্যবহারকারীদের সহজে ফাইলগুলি ওয়েব অ্যাপ্লিকেশন বা সাইটে আপলোড করতে সহায়তা করে। ExtJS এর Drag and Drop সমর্থন এবং File Upload ফিচার ব্যবহারের মাধ্যমে আপনি একটি কাস্টম ড্র্যাগ এবং ড্রপ ফাইল আপলোড সিস্টেম তৈরি করতে পারবেন।

এখানে, আমরা ExtJS এর মাধ্যমে কাস্টম ড্র্যাগ এবং ড্রপ ফিচার ব্যবহার করে ফাইল আপলোড করার জন্য একটি উদাহরণ দেখবো।


১. ExtJS এর মাধ্যমে কাস্টম Drag and Drop ফাইল আপলোড

এটি করার জন্য আমরা কয়েকটি কাস্টম ফিচার এবং FileReader API ব্যবহার করব। প্রথমে, drag and drop সাপোর্ট এবং তারপর upload ফাংশনালিটি তৈরি করব।

কাস্টম ড্র্যাগ এবং ড্রপ ফাইল আপলোড উদাহরণ:

Ext.create('Ext.panel.Panel', {
    title: 'Drag and Drop File Upload',
    width: 500,
    height: 200,
    renderTo: Ext.getBody(),
    layout: 'fit',
    
    // Drag and drop configuration
    listeners: {
        render: function(panel) {
            panel.getEl().on('dragover', function(e) {
                e.stopEvent();
                panel.body.setStyle('background-color', '#f0f0f0'); // Hover effect
            });

            panel.getEl().on('dragleave', function(e) {
                e.stopEvent();
                panel.body.setStyle('background-color', ''); // Remove hover effect
            });

            panel.getEl().on('drop', function(e) {
                e.stopEvent();
                panel.body.setStyle('background-color', ''); // Remove hover effect

                var files = e.browserEvent.dataTransfer.files;
                if (files.length > 0) {
                    var file = files[0];
                    // Call function to upload file
                    uploadFile(file);
                }
            });
        }
    },

    html: '<div style="height: 100%; display: flex; justify-content: center; align-items: center;">' +
          '<p>Drag and drop a file here to upload.</p></div>'
});

// Function to upload the file
function uploadFile(file) {
    var formData = new FormData();
    formData.append('file', file);

    // Create an AJAX request to upload the file
    Ext.Ajax.request({
        url: 'your-upload-endpoint.php', // Server-side script to handle file upload
        method: 'POST',
        rawData: formData,
        headers: {
            'Content-Type': null // Let the browser set the correct content-type for FormData
        },
        success: function(response) {
            Ext.Msg.alert('Success', 'File uploaded successfully!');
        },
        failure: function(response) {
            Ext.Msg.alert('Error', 'File upload failed.');
        }
    });
}

ব্যাখ্যা

  1. render লিসেনার:
    • প্যানেলের render ইভেন্টে আমরা ড্র্যাগ এবং ড্রপ ইভেন্ট হ্যান্ডলিং সেট করছি।
    • dragover: ব্যবহারকারী যখন ফাইলটি প্যানেলের উপর ড্র্যাগ করবে তখন এটি ট্রিগার হবে। আমরা ব্যাকগ্রাউন্ড রং পরিবর্তন করছি যাতে ফাইল ড্রপ হওয়ার জন্য প্রস্তুত দেখায়।
    • dragleave: ফাইলটি প্যানেলের বাইরে চলে গেলে এটি ট্রিগার হয় এবং ব্যাকগ্রাউন্ড রং পূর্বাবস্থায় ফিরে যায়।
    • drop: ব্যবহারকারী যখন ফাইলটি প্যানেলের মধ্যে ছেড়ে দিবে, তখন এটি ট্রিগার হবে এবং uploadFile() ফাংশন কল হবে, যা ফাইলটি আপলোড করতে ব্যবহৃত হবে।
  2. ফাইল আপলোডের জন্য uploadFile() ফাংশন:
    • FormData ব্যবহার করে ফাইলটি সার্ভারে পাঠানো হয়।
    • Ext.Ajax.request() ব্যবহার করে AJAX রিকুয়েস্ট পাঠানো হয়। এখানে, ফাইলটি POST মেথড দিয়ে সার্ভারে পাঠানো হয়।
  3. সার্ভার সাইড:
    • এই উদাহরণে, your-upload-endpoint.php হল সেই URL যেখানে ফাইলটি আপলোড করা হবে। সার্ভার সাইডে ফাইল রিসিভ এবং প্রক্রিয়া করার জন্য সঠিক স্ক্রিপ্ট তৈরি করতে হবে।

২. ফাইল প্রিভিউ দেখানো

এছাড়া, আপনি যদি ফাইলের প্রিভিউ দেখতে চান, যেমন ইমেজ বা পিডিএফ ফাইল, তবে FileReader API ব্যবহার করে ফাইলের প্রিভিউ প্রদর্শন করতে পারেন।

ফাইল প্রিভিউ উদাহরণ:

function uploadFile(file) {
    // FileReader API to preview image
    var reader = new FileReader();
    
    reader.onload = function(e) {
        var img = new Image();
        img.src = e.target.result;
        var previewContainer = Ext.create('Ext.container.Container', {
            renderTo: Ext.getBody(),
            items: [{
                xtype: 'image',
                src: e.target.result,
                height: 150
            }]
        });
    };

    reader.readAsDataURL(file); // Read the file as Data URL

    // Now upload the file to the server
    var formData = new FormData();
    formData.append('file', file);

    Ext.Ajax.request({
        url: 'your-upload-endpoint.php',
        method: 'POST',
        rawData: formData,
        headers: {
            'Content-Type': null
        },
        success: function(response) {
            Ext.Msg.alert('Success', 'File uploaded successfully!');
        },
        failure: function(response) {
            Ext.Msg.alert('Error', 'File upload failed.');
        }
    });
}

এখানে, FileReader ব্যবহার করে আমরা ফাইলটি Data URL হিসেবে রিড করছি এবং তারপর একটি ইমেজ হিসেবে প্রদর্শন করছি। এটি ইমেজ ফাইলগুলির জন্য প্রিভিউ দেখাতে সাহায্য করবে।


৩. ফাইল টাইপ চেক করা

ফাইলের টাইপ চেক করতে পারেন যাতে শুধুমাত্র নির্দিষ্ট ধরনের ফাইল আপলোড করা যায়।

ফাইল টাইপ চেক উদাহরণ:

function uploadFile(file) {
    var validFileTypes = ['image/jpeg', 'image/png', 'application/pdf']; // Example valid file types
    if (validFileTypes.indexOf(file.type) === -1) {
        Ext.Msg.alert('Invalid File', 'Only JPG, PNG, and PDF files are allowed!');
        return;
    }

    var formData = new FormData();
    formData.append('file', file);

    Ext.Ajax.request({
        url: 'your-upload-endpoint.php',
        method: 'POST',
        rawData: formData,
        headers: {
            'Content-Type': null
        },
        success: function(response) {
            Ext.Msg.alert('Success', 'File uploaded successfully!');
        },
        failure: function(response) {
            Ext.Msg.alert('Error', 'File upload failed.');
        }
    });
}

এখানে, আমরা file.type এর মাধ্যমে ফাইলের MIME টাইপ যাচাই করছি এবং কেবলমাত্র নির্দিষ্ট ফাইল টাইপ (যেমন, JPG, PNG, PDF) অনুমোদন করছি।


সারাংশ

  1. Drag and Drop ফিচার ব্যবহার করে আপনি ইউজারদের সহজে ফাইল আপলোড করার সুযোগ দিতে পারেন।
  2. FileReader API ব্যবহার করে আপনি ফাইলের প্রিভিউ প্রদর্শন করতে পারেন।
  3. AJAX request ব্যবহার করে ফাইল সার্ভারে আপলোড করা হয় এবং ফলাফল ইউজারকে জানানো হয়।
  4. ফাইল টাইপ চেক করার মাধ্যমে আপনি শুধুমাত্র নির্দিষ্ট ফাইল ফরম্যাটগুলো গ্রহণ করতে পারেন।

এটি একটি কাস্টম ড্র্যাগ এবং ড্রপ ফাইল আপলোড সিস্টেম তৈরি করার মৌলিক পদ্ধতি, যা ExtJS ফ্রেমওয়ার্কে কার্যকরভাবে কাজ করবে।

Content added By
Promotion