Socket.IO ile Dosya Transferi Nasıl Yapılır?


Socket.IO ile Dosya Transferi Nasıl Yapılır?

Gerçek zamanlı web uygulamalarında dosya transferi ihtiyacı oldukça yaygındır. Socket.IO, WebSocket protokolü üzerine kurulu olup, anlık veri iletiminde performans ve esneklik sunar. Socket.IO ile dosya transferi konusunda pratik ve etkili çözümler geliştirerek, kullanıcı deneyimini artırabilirsiniz. Bu yazıda, Socket.IO ile dosya transferinin nasıl yapılacağını adım adım anlatacağız.

Socket.IO ile Dosya Transferinin Temel Adımları

Socket.IO ile dosya transferi yaparken dosya verisi genellikle ikili (binary) biçimde iletilir. JavaScript ve Node.js ile çalışan projelerde genellikle Buffer veya ArrayBuffer yapıları kullanılır. Transfer sürecinde, dosya verisi önce istemciden alınır, ardından Socket.IO ile sunucuya gönderilir ve sonrasında dosya sunucuda işlenir ya da başka istemcilere iletilir.

Sunucu Tarafında Socket.IO ile Dosya Alma

const fs = require('fs');
const app = require('express')();
const server = require('http').Server(app);
const io = require('socket.io')(server, {
    cors: { origin: '*' }
});
server.listen(3000);

io.on('connection', (socket) => {
    console.log('Bir kullanıcı bağlandı.');
    socket.on('file-upload', (data) => {
        // "data" { buffer: ..., fileName: ... } şeklinde gelmeli
        fs.writeFile(`./uploads/${data.fileName}`, data.buffer, (err) => {
            if (err) {
                socket.emit('upload-status', { success: false, message: 'Yükleme başarısız!' });
            } else {
                socket.emit('upload-status', { success: true, message: 'Dosya başarıyla yüklendi.' });
            }
        });
    });
});

İstemci Tarafında Dosya Gönderimi

const socket = io('http://localhost:3000');

document.getElementById('fileInput').addEventListener('change', function(e) {
    const file = e.target.files[0];
    const reader = new FileReader();
    reader.onload = function(evt) {
        socket.emit('file-upload', {
            buffer: evt.target.result,
            fileName: file.name
        });
    };
    reader.readAsArrayBuffer(file);
});

socket.on('upload-status', function(status) {
    alert(status.message);
});

Socket.IO ile Dosya Transferinde Dikkat Edilmesi Gerekenler

Socket.IO ile dosya transferi sırasında dosya boyutlarına dikkat edilmeli, çok büyük dosyalar parçalara bölünerek aktarılmalıdır. Ayrıca güvenlik için dosya tipine ve içeriğine kontrol eklenmelidir. Dosya yüklerken kullanıcıya dönütler verilmeli ve transfer tamamlandığında uyarılarla bilgilendirme yapılmalıdır.

Sonuç

Socket.IO ile dosya transferi gerçek zamanlı ve etkili bir çözüm sunar. Uygulamanıza dosya yükleme özelliği eklemek için yukarıdaki örnekleri kullanabilir, ihtiyaçlarınıza göre özelleştirebilirsiniz. Doğru şekilde yapılandırıldığında, Socket.IO ile hızlı ve güvenli dosya aktarımı mümkündür.