خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

چگونه فایل ها را در Node.js فشرده و از حالت فشرده خارج کنیم

از بسته های Archiver و Unzipper برای فشرده سازی و از حالت فشرده خارج کردن فایل ها در Node.js استفاده کنید.

بایگانی فایل یک فعالیت روزمره در دنیای مدرن است زیرا همه می توانند مزایای ارائه شده توسط فشرده سازی فایل ها یا پوشه ها را در قالب های کوچکتر و قابل حمل تایید کنند.

فرمت ZIP یکی از محبوب‌ترین فرمت‌های آرشیو مورد استفاده در دنیای محاسبات است و برای افرادی که نیاز به تبدیل فایل‌های خام به آرشیو برای ذخیره‌سازی بهتر، انتقال کارآمد یا هر دلیل دیگری دارند، بسیار توصیه می‌شود.

بنابراین، چرا باید فایل‌های خود را فشرده کنید، و چگونه می‌توانید فایل‌ها را به ZIP فشرده کنید و با استفاده از Node.js آنها را به حالت اولیه خود بازگردانید؟

چرا فایل ها را فشرده کنیم؟

در بسیاری از مواقع، فایل‌ها و پوشه‌ها بسیار بزرگ می‌شوند و اشتراک‌گذاری یا انتقال آن‌ها مشکل ساز می‌شود، زیرا یا برای ذخیره‌سازی آن‌ها در یک درایو ذخیره‌سازی با ظرفیت خاص بسیار بزرگ هستند، یا زمان زیادی برای آپلود در فضای ذخیره‌سازی ابری طول می‌کشد. .

در سناریوهایی مانند این و بسیاری موارد دیگر، باید چنین فایل‌ها یا پوشه‌هایی را در اندازه‌های بسیار کوچک‌تر فشرده کنید. جدا از انتقال آسان تر فایل، دلایل دیگری که ممکن است فایل های خود را فشرده سازی کنید عبارتند از:

  • ذخیره سازی کارآمد
  • ساختار و سازماندهی بهتر فایل
  • امنیت (رمزگذاری فایل و محافظت از رمز عبور)
  • یکپارچگی فایل
  • نسخه سازی فایل

بسته های Node.js Archiver و Unzipper چیست؟

اسناد رسمی بسته Archiver بسته را به عنوان “یک رابط جریان برای تولید آرشیو” توصیف می کند. این بدان معناست که بسته Archiver کتابخانه ای از توابع را فراهم می کند که از جریان های Node.js برای ایجاد آرشیو فایل های فشرده استفاده می کند.

بسته Archiver به طور پیش فرض از چندین فرمت آرشیو از جمله ZIP، GZIP و TAR پشتیبانی می کند. این بسته همچنین به شما امکان می‌دهد بایگانی‌هایی را از فایل‌ها و دایرکتوری‌ها ایجاد کنید و آرشیوهای بزرگ را به بخش‌های کوچک‌تر (آرشیوهای چند جلدی) تقسیم کنید. همچنین به شما امکان می دهد فایل ها را در حین فشرده سازی حذف یا فیلتر کنید.

بسته Unzipper یک بسته بسیار کارآمد برای استخراج آرشیو ZIP در Node.js است. این بسته یک API با کاربری آسان ارائه می دهد که به توسعه دهندگان اجازه می دهد فایل های ZIP را تنها با چند خط کد استخراج کنند.

مطلب مرتبط:   Microservices توضیح داد: چگونه کار می کنند و چه چیزی در مورد آنها خوب است؟

بسته‌های Archiver و Unzipper انتخاب‌های این آموزش هستند، زیرا آنها به‌طور یکپارچه با ماژول Node.js fs ادغام می‌شوند و از سازگاری و سادگی هموار اطمینان می‌دهند.

نحوه فشرده سازی فایل ها به فرمت ZIP در Node.js

فشرده سازی فایل ها به فرمت ZIP در Node.js مانند هر زبان دیگری به لطف بسته Archiver آسان است. برای ایجاد بایگانی ZIP در Node.js در حالی که این بخش را دنبال می کنید، به یک محیط توسعه Node.js روی رایانه خود نیاز دارید.

شما یک اسکریپت ساده Node.js برای فشرده سازی یک فایل و پوشه به فرمت ZIP ایجاد خواهید کرد. با اجرای دستورات زیر یک پروژه Node جدید در رایانه خود ایجاد کنید:

mkdir node-zip-archiver
cd node-zip-archiver
npm init -y

در مرحله بعد، باید بسته Archiver را در پروژه خود نصب کنید. npm install archiver –save را در ترمینال خود اجرا کنید تا آن را نصب کنید. پس از اتمام نصب بسته، یک فایل جدید در دایرکتوری پروژه ایجاد کنید و آن را با توجه به اولویت خود نامگذاری کنید، به عنوان مثال. app.js یا archiver.js.

ماژول fs عملیات فایل را مدیریت می کند، در حالی که بسته Archiver فشرده سازی فایل ها و پوشه ها را در بایگانی ZIP انجام می دهد، از این رو، اسکریپت به هر دو ماژول نیاز دارد.

ایجاد آرشیو ZIP از فایل ها

کد زیر پیاده سازی تابعی است که یک فایل را به عنوان آرگومان می پذیرد و یک نسخه فشرده فشرده از فایل ایجاد می کند.

const archiver = require('archiver')
const fs = require('fs')

// create ZIP from file
const createZipFromFile = (file) => {
    const filePath = __dirname + '/' + file
    const output = fs.createWriteStream(filePath + '.zip')
    const archive = archiver('zip', {
        zlib: { level: 9 } // set compression level to the highest
    })

    archive.pipe(output);
    archive.file(filePath, { name: file })
    archive.finalize()
}

این تابع نام فایل فایل را برای فشرده سازی می گیرد و یک فایل خروجی با نام مشابه تولید می کند (تنها تمایز اضافه کردن پسوند فایل ZIP است).

سپس، تابع یک آرشیو جدید با سطح فشرده سازی تنظیم شده روی 9 (بالاترین) ایجاد می کند و از تابع لوله برای انتقال جریان های خروجی بایگانی به ورودی فایل خروجی استفاده می کند.

مطلب مرتبط:   چگونه API های Express را با Jest آزمایش کنیم

تابع فایل یک فایل را به بایگانی اضافه می کند. مسیر فایل را به عنوان یک پارامتر و یک پارامتر گزینه اختیاری می پذیرد که در آن می توانید ویژگی های فایل را در بایگانی مشخص کنید.

گزینه name نام فایل درون آرشیو را مشخص می کند. اگر هنگام افزودن فایل به بایگانی گزینه مشخص نشده باشد، Archiver فایل را بر اساس مسیر اصلی آن در بایگانی قرار می دهد و ساختار دایرکتوری را حفظ می کند.

با این حال، هنگامی که به صراحت ارائه می شود، Archiver فایل را بدون مسیر اصلی آن به بایگانی اضافه می کند و امکان نام گذاری و سازماندهی سفارشی را در بایگانی فراهم می کند.

ایجاد آرشیو ZIP از پوشه ها

روند ایجاد آرشیو ZIP از پوشه ها با روند ایجاد فایل ها تفاوت چندانی ندارد. تفاوت اصلی استفاده از تابع دایرکتوری بسته Archiver بر خلاف فایل در تابع قبلی است.

در زیر اجرای تابعی برای فشرده سازی یک پوشه در یک آرشیو ZIP آورده شده است.

// create ZIP from folder
const createZipFromFolder = (folder) => {
    const folderPath = __dirname + '/' + folder
    const output = fs.createWriteStream(folderPath + '.zip')

    const archive = archiver('zip', {
        zlib: { level: 9 } // set compression level to the highest
    })

    archive.pipe(output)
    archive.directory(folderPath, false)
    archive.finalize()
}

تابع دایرکتوری مسیر پوشه را به عنوان اولین آرگومان و یک پرچم را به عنوان آرگومان دوم خود می گیرد. پرچم محل قرارگیری پوشه را در بایگانی تعیین می کند.

هنگامی که پرچم روی false تنظیم شود، آرشیو حاصل فقط حاوی محتویات پوشه است، به استثنای خود پوشه. اما اگر پرچم روی true تنظیم شود، Archiver خود پوشه را در آرشیو تولید شده قرار می دهد

اگر می خواهید از آلوده نشدن مکانی که در آن بایگانی خود را در آن استخراج می کنید با فایل های بایگانی فشرده جلوگیری کنید، باید به فکر تنظیم گزینه flag روی true باشید. با این حال، اگر با اهداف شما مطابقت دارد، ممکن است آن را روی false تنظیم کنید.

چگونه فایل ها را در Node.js از حالت فشرده خارج کنیم

فرآیند استخراج فایل های ZIP در Node.js چندین رویکرد دارد و چندین کتابخانه برای استفاده در دسترس است، اما در این مقاله از بسته Unzipper استفاده شده است.

مطلب مرتبط:   چگونه با استفاده از Stencil.js یک کامپوننت وب بسازیم

دستور زیر را در ترمینال خود اجرا کنید تا بسته Unzipper را در پروژه خود نصب کنید.

npm install unzipper --save

پس از نصب بسته، آن را در کد خود وارد کنید و تابع استخراج ZIP که در کد زیر نشان داده شده است را اجرا کنید:

const unzipper = require("unzipper")

//function to extract ZIP file
const extractZip = async (file) => {
    const filePath = __dirname + '/' + file
    const outputPath = __dirname + '/extracted'
    await fs.createReadStream(filePath)
        .pipe(unzipper.Extract({ path: outputPath }))
        .promise()
}

تابع extractZip یک تابع ناهمزمان است که یک جریان خواندنی برای خواندن محتوای فایل ZIP ایجاد می کند و فایل را در مسیر خروجی مشخص شده استخراج می کند (در صورت عدم وجود پوشه استخراج شده را ایجاد می کند).

در مورد فشرده سازی یا استخراج، نیازی به تعریف توابع مختلف برای فایل ها و پوشه ها نیست، زیرا آرشیو ZIP یک فایل صرف نظر از محتوای موجود در آن است.

در زیر تابعی است که می توانید برای آزمایش عملکردهایی که تا کنون ایجاد کرده اید به برنامه اضافه کنید:

(async function () {
    const file = 'test.pdf'
    const folder = 'test_folder'
    const zipFile = 'test.pdf.zip'
    createZipFromFile(file)
    console.log('ZIP archive successfully created from file')
    createZipFromFolder(folder)
    console.log('ZIP archive successfully created from folder')
    await extractZip(zipFile)
    console.log('ZIP archive extracted successfully')
}) ()

همه توابع قبلی توابع پیکانی جاوا اسکریپت هستند، اما تابع فوق متفاوت است زیرا یک عبارت Invoked Function است که کد درون آن را کپسوله می کند و بلافاصله آن را اجرا می کند.

فشرده سازی فایل در ساخت برنامه های کارآمد مفید است

برای ارائه خدمات بهتر به کاربران و حفظ تجربه کاربری لذت بخش، همیشه باید یک هدف باشد که برنامه های خود را تا آنجا که می توانند کارآمد کنید.

در سناریوهایی که نیاز به انتقال فایل های زیادی در برنامه خود دارید، در حین انتقال فایل ها را فشرده و از حالت فشرده خارج کنید. اکثر زبان‌های برنامه‌نویسی مدرن از فشرده‌سازی و فشرده‌سازی مؤثر فایل‌ها پشتیبانی می‌کنند.