Fastify.js ile Güvenli File Upload Yöntemi


Fastify.js ile Güvenli File Upload Yöntemi

Fastify.js ile File Upload'a Giriş

Node.js dünyasında performans ve güvenlik açısından popülerliğini hızla arttıran Fastify.js, düşük kaynak tüketimi ve eklenti desteğiyle öne çıkıyor. API veya web uygulamalarınızda kullanıcıların dosya yüklemesi (file upload) yapmasını sağlamak için Fastify.js ile kolayca güvenli bir dosya yükleme sistemi kurabilirsiniz. Bu makalede, Fastify.js ile file upload işleminin nasıl yapıldığını adım adım inceleyeceğiz.

Fastify.js ile File Upload Nasıl Yapılır?

File upload özelliğini Fastify.js projesine entegre etmek için ilk olarak @fastify/multipart eklentisini yüklemelisiniz. Bu eklenti, gelen multipart/form-data isteklerini yönetmenize olanak tanır. İşte temelden başlamak isteyenler için örnek bir kurulum ve kod örneği:

// fastify-dosya-upload.js
const fastify = require('fastify')();
const path = require('path');
const fs = require('fs');

// Multipart plugin kurulumu
fastify.register(require('@fastify/multipart'));

fastify.post('/upload', async function (req, reply) {
  const data = await req.file();
  const filePath = path.join(__dirname, 'uploads', data.filename);

  await pumpStream(data.file, fs.createWriteStream(filePath));
  reply.send({ success: true, filename: data.filename });
});

async function pumpStream(source, dest) {
  return new Promise((resolve, reject) => {
    source.pipe(dest);
    dest.on('finish', resolve);
    dest.on('error', reject);
  });
}

fastify.listen({ port: 3000 }, (err, address) => {
  if (err) throw err;
  console.log(`Sunucu çalışıyor: ${address}`);
});

Bu örnekte Fastify.js ile gelen dosya sunucunun uploads dizinine güvenli şekilde kaydediliyor. @fastify/multipart sayesinde dosya akışı kolayca yönetilebiliyor. Ayrıca proje kök dizininde uploads klasörünüzün mevcut olduğuna emin olun.

Frontend İçin Basit Bir HTML Form

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="file" />
  <button type="submit">Yükle</button>
</form>

Bu HTML formunu Fastify.js ile oluşturduğunuz backend sunucusuna bağlayarak dosya yüklemeyi test edebilirsiniz.

Dosya Upload İşlemlerinde Güvenlik

Fastify.js ile file upload yaparken, yalnızca güvenilir dosya türlerini kabul ettiğinizden emin olun. Kullanıcıdan gelen dosyanın tipini data.mimetype ile kontrol edebilir, aşırı büyük dosya yüklemelerini engellemek için de limits ayarı kullanabilirsiniz. Ayrıca yüklenecek dosya adını sunucuda tekrar adlandırarak olası güvenlik açıklarını önleyebilirsiniz.

// Yalnızca görsel dosyalarını kabul et
if (!['image/png', 'image/jpeg'].includes(data.mimetype)) {
  return reply.status(400).send({ error: 'Geçersiz dosya türü.' });
}

Sonuç: Fastify.js ile Pratik File Upload

Fastify.js ile file upload işlemi hem performanslı hem de güvenli biçimde gerçekleştirilebilir. Eklenti desteği sayesinde ister tek dosya, ister çoklu dosya yüklemelerini kolayca kurgulayabilirsiniz. Doğru güvenlik önlemleriyle Fastify.js, modern Node.js projelerinde file upload ihtiyacınıza ideal çözümler sunar.