Node.JS

NodeJS Dosya Sıkıştırma

Herkese merhabalar, NodeJS derslerimize kaldığımız yerden devam ediyoruz. Bu dersimizde dosya sıkıştırmayı anlatacağım. Hadi başlayalım !

NodeJS iel dosya sıkıştırma yapabilmemiz için tabiki öncelikle NodeJS projesi oluşturmamız gerekiyor. Proje oluşturmak için terminal (Windows için CMD) ile proje oluşturmak istediğimiz klasöre geçerek
npm init --yes
komutunu girelim ve NodeJS projesinin oluşturulmasını bekleyelim.
Ardından proje ana dizinimizde index.js adında bir tane Javascript dosyası oluşturalım ve bu dosyayı açarak kod yazmaya başlayalım.
NodeJS ile dosya sıkıştırmak için compressing paketini kullanacağız ve bu paket ile tar, gzip, tgz ve zip formatında sıkıştırma yapabiliyoruz. Ben sadece zip sıkıştırmayı anlatacağım fakat tar, tgz ve gzip sıkıştırmalar da aynı şekilde yapılabiliyor.
compressing paketini kurmak için terminali açarak
npm i compressing
komutunu girelim ve NPM’in compressing paketini indirerek projeye eklemesini bekleyelim. İşlemin tamamlanmasının ardından index.js dosyasında bu paketi çağırmamız gerektiği için dosya başına
const compressing = require('compressing');
kod satırını yazalım. Artık sıkıştırma işlemini yapmak için herşey hazır 🙂

Bu paket ile sıkıştırma yapmak için iki farklı kullanımı mevcut. Birincisi paket üzerindeki static sınıf ve fonksiyonlara doğrudan erişim yaparak sıkıştırma. İkincisi stream nesneleri kullanarak sıkıştırma.
İlk olarak static sınıf ve fonksiyonlar ile sıkıştırma yapmak için şu şekilde bir yol izlememiz gerekecek;
  1. compressing paketi altındaki sıkıştırma yöntemleri için oluşturulmuş namespacelere ulaşmak,
  2. Stream ile sıkıştırma için,
    • stream nesnesi ile sıkıştırılacak dosyayı streame yüklemek,
    • stream üzerinde bulunan veriyi hedef dosyaya yazmak,
  3. Statik nesneler ile yapmak için;
    • doğrudan sıkıştırma fonksiyonuna giderek sıkıştırma işlemini tamamlamak.
Stream nesneleri üzerinden yapabilmek için öncelikle compressing namespacesi altında bulunan sıkıştırma metodları sınıfları (gzip, gzip, tgz yada zip) altında bulunan FileStream sınıfından bir nesne türetmek gerekiyor. Nesne türetirken FileStream sınıfının constructor metoduna sıkıştırılacak dosya yolunu parametre olarak vereceğiz ve sonrasında pipe() metodu ile fs sınıfından türettiğimiz WriteStream ile okunan hedef yolu parametre olarak vererek sıkıştırma işlemini vereceğiz. Her bir adımda on() metodu ile oluşabilecek hataları yakalayabileceğiz.
Örneğin masaüstünde bulunan veriler.json dosyasını stream kullanarak zip olarak sıkıştıralım;
new compressing.zip.FileStream({ source: 'c:/users/kullanıcı/desktop/veriler.json' }).pipe(fs.createWriteStream('c:/users/kullanıcı/desktop/veriler.zip'));
Aynı işlemi birde statik sınıflar ile yapalım;
compressing.zip.compressFile('c:/users/kullanıcı/desktop/veriler.json', 'c:/users/kullanıcı/desktop/veriler.zip');
compressing sınıfı ile klasör sıkıştırmak için statik yöntemde compressFile() metodu yerine compressDir() metodunu kullanıyoruz ve geri kalan herşey aynı. Yani örneğin masaüstünde bulunan veriler adındaki klasörü yine masaüstüne veriler.zip olarak sıkıştıralım;
compressing.zip.compressDir('c:/users/kullanıcı/desktop/veriler', 'c:/users/kullanıcı/desktop/veriler.zip');
Klasörleri stream yöntemiyle sıkıştırmak için ise
const stream = new compressing.zip.Stream();
stream.addEntry('c:/users/kullanıcı/desktop/veriler');
stream.pipe(fs.createWriteStream('c:/users/kullanıcı/desktop/veriler.zip'));
Ben zip olarak örnek verdim fakat örneğin tar olarak sıkıştırmak için yazmış olduğum kodlarda zip geçen her yeri tar olarak değiştirirseniz tar olarakta sıkıştırma yapabileceksiniz.

Evet compressing paketi ile dosya ve klasör sıkıştırma işlemi bu şekilde yapılmakta. Yazmış olduğumuz kodları daha açıklayıcı ve toplu olması için aşağıya bırakıyorum;
const compressing = require('compressing');
const fs = require('fs');

// Stream ile dosya sıkıştırma
new compressing.zip.FileStream({ source: 'c:/users/kullanıcı/desktop/veriler.json' }).pipe('c:/users/kullanıcı/desktop/veriler.zip');
// Stream ile klasör sıkıştırma
const stream = new compressing.zip.Stream();
stream.addEntry('c:/users/kullanıcı/desktop/veriler');
stream.pipe(fs.createWriteStream('c:/users/kullanıcı/desktop/veriler.zip'));

// Statik olarak dosya sıkıştırma
compressing.zip.compressFile('c:/users/kullanıcı/desktop/veriler.json', 'c:/users/kullanıcı/desktop/veriler.zip');
// Statik olarak klasör sıkıştırma
compressing.zip.compressDir('c:/users/kullanıcı/desktop/veriler', 'c:/users/kullanıcı/desktop/veriler.zip');
Bir yazımızın daha sonuna geldik, tüm NodeJS derslerimize buraya tıklayarak ulaşabilirsiniz. Herkese hayırlı günler.
Skorumuz:
Oy Vermek İçin Tıklayın
[Toplam: 0 Ortalama: 0]

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.

Başa dön tuşu