Node.js Dosya Yükleme

Node.js ile dosya yükleme veya dosya upload etme olarak geçen kullanıcıların sunucuya dosya yükleme işlemi ile ilgili bilgiler yer alıyor.

Node.js ile dosya yükleme işlemini kendimiz yapabileceğimiz gibi formidable modülü ile de yapabiliriz.

Dosya yükleme

Dosya yükleme işlemi için öncelikle dosya yükleme formunu hazırlayalım.

<form action="yukleme" method="POST" enctype="multipart/form-data">
  <input type="file" name="yuklenecek_dosya" required="required" />
  <input type="submit" />
</form>

NOT: Formdaki method değerinin POST ve enctype değerinin multipart/form-data olduğuna dikkat edin.

Form hazırlandıktan sonra formu gösterelim.

const http = require('http');
const fs = require('fs');

http.createServer(function (req, res) {
  fs.createReadStream('form.html').pipe(res);
}).listen(3000);

Formdan gönderilen bilgileri alalım.

const http = require('http');
const fs = require('fs');

http.createServer(function (req, res) {

  if (req.url == '/yukleme') {
    let veriler = '';
    req.on('data', veri => veriler += veri);
    req.on('end', () => console.log(veriler));
    res.end();
  } else {
    res.writeHead(200, { 'Content-type': 'text/html' });
    fs.createReadStream('form.html').pipe(res);
  }

}).listen(3000);

Formdan gönderilen bilgilere ulaştık ancak gönderilen verileri iyi bir şekilde parçalara ayrılıp düzenlenmesi gerek.

Kullanılan hemen hemen tüm modüller http, fs, querystring gibi Node.js içerisinde yer alan çekirdek modülleri kullanarak işlem yapar.

Bu işlemi bizim yerimize yapan formidable modülünü kullanabiliriz.

Modülü aşağıdaki komutlar kullanılarak indirilir.

npm install formidable
veya
npm install formidable --save

Modül projeye dahil edilir.

const formidable = require('formidable');

Dosya yükleme işlemi için modül içerisinde yer alan IncomingForm sınıfı kullanılır.

Sınıf içinde yer alan uploadDir, maxFileSize gibi özellikler düzenlenerek dosya boyutu, dosya yükleme yeri gibi ayarlar yapılabilir.

Yüklenen dosyaları işlemek için sınıf içinde yer alan parse metodu kullanılır.

Metot parametre olarak istek ve geri bildirim fonksiyonu alır.

Geri bildirim fonksiyonunda yer alan parametreler kullanılarak dosya yükleme işlemi yapılır.

const http = require('http');
const fs = require('fs');
const formidable = require('formidable');

http.createServer(function (req, res) {
  res.writeHead(200, { 'Content-type': 'text/html;charset=utf-8' });

  if (req.url == '/yukleme') {

    let yukleme = new formidable.IncomingForm();
    yukleme.parse(req, function (err, fields, files) {

      let dosyaYolu = files.yuklenecek_dosya.path;
      let yuklenecekYer = __dirname + '/' + files.yuklenecek_dosya.name;

      fs.rename(dosyaYolu, yuklenecekYer, function (error) {
        if (error) throw error;
        res.write('Dosya başarıyla yüklendi.');
        res.end();
      });

    });

  } else {
    fs.createReadStream('form.html').pipe(res);
  }

}).listen(3000);

Express.js kullanarak dosya yükleme işlemi aşağıdaki gibi yapılır.

const express = require('express');
const app = express()
const fs = require('fs');
const formidable = require('formidable');

app.post('/yukleme', function (req, res) {

  let yukleme = new formidable.IncomingForm();
  yukleme.parse(req, function (err, fields, files) {

    let dosyaYolu = files.yuklenecek_dosya.path;
    let yuklenecekYer = __dirname + '/' + files.yuklenecek_dosya.name;

    fs.rename(dosyaYolu, yuklenecekYer, function (error) {
      if (error) throw error;
      res.send('Dosya başarıyla yüklendi.');
    });

  });
});

app.get('/', function (req, res) {
  res.sendFile(__dirname + '/form.html');
});

app.listen(3000);

Modül içinde yer alan ayar ve kontrollerin yapılması olası hata ve siteye komut enjekte edilmesini önleyecektir.

Node.js Derslerine buradan ulaşabilirsiniz…

Hayırlı günler dilerim.

Yusuf SEZER

Yusuf SEZER

Computer Engineer who interested about web technologies, algorithms, artificial intelligence and embedded systems; constantly exploring new technologies.


Bunlara'da bakmalısın!