pakej termampat muat naik penyebaran nodejs

WBOY
Lepaskan: 2023-05-08 11:42:07
asal
736 orang telah melayarinya

Dalam pembangunan web moden, menggunakan Node.js untuk membina aplikasi back-end telah menjadi trend. Memandangkan aplikasi sentiasa dikemas kini, kami selalunya perlu menggunakan versi kemas kini baharu pada pelayan. Oleh itu, artikel ini akan memperkenalkan cara menggunakan Node.js untuk menggunakan dan memuat naik pakej termampat untuk mencapai kemas kini aplikasi yang pantas, mudah dan cekap.

  1. Fail termampat

Sebelum memuat naik, kami perlu memampatkan fail untuk digunakan ke dalam fail Zip atau tar.gz. Sangat mudah untuk menggunakan Node.js untuk melengkapkan pemampatan fail Anda hanya perlu menggunakan modul "zlib" dan "fs" terbina dalam Node.js untuk mencapai pemampatan fail dengan mudah. Berikut ialah kod mampatan mudah:

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

const srcFileName = 'srcFile.txt';
const destFileName = 'srcFile.txt.gz';

// 创建压缩流
const gzip = zlib.createGzip();
const inp = fs.createReadStream(srcFileName);
const out = fs.createWriteStream(destFileName);

inp.pipe(gzip).pipe(out);

console.log('文件压缩成功!');
Salin selepas log masuk

Kita boleh merangkum kod di atas ke dalam fungsi untuk kegunaan masa hadapan:

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

function compress(file) {
  const gzip = zlib.createGzip();
  const src = fs.createReadStream(file);
  const dest = fs.createWriteStream(file + '.gz');

  src.pipe(gzip).pipe(dest);

  console.log(`文件 ${file} 压缩成功!`);
}
Salin selepas log masuk

"Fail" ialah nama fail yang perlu dimampatkan , yang boleh menjadi laluan relatif atau laluan mutlak.

  1. Muat naik fail

Selepas melengkapkan pemampatan fail, kami perlu memuat naik fail yang dimampatkan ke pelayan. Di sini kita boleh menggunakan modul pihak ketiga untuk melaksanakan fungsi muat naik fail. Modul yang biasa digunakan ialah "gerun", iaitu modul penghuraian bentuk yang cekap yang boleh membantu kami mengendalikan operasi muat naik fail.

Pertama, kita perlu memasang "formidable":

npm install formidable --save
Salin selepas log masuk

Kemudian, kita boleh menggunakan kod berikut untuk melaksanakan fungsi muat naik fail:

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

http.createServer((req, res) => {
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    const form = formidable({ multiples: true });

    form.parse(req, (err, fields, files) => {
      const oldPath = files.file.path;
      const newPath = __dirname + '/uploads/' + files.file.name;

      fs.rename(oldPath, newPath, (err) => {
        if (err) throw err;
        res.writeHead(200, { 'content-type': 'text/plain' });
        res.end('文件上传成功!');
      });
    });

    return;
  }
}).listen(8080);

console.log('服务器启动成功!');
Salin selepas log masuk

Seperti yang ditunjukkan di atas kod, kami mencipta pelayan HTTP mendengar pada port 8080. Apabila pelanggan meminta permintaan POST dengan URL "/muat naik", kami menggunakan "menggerunkan" untuk menghuraikan data fail dalam permintaan POST. Selepas menghuraikan, kami boleh mendapatkan maklumat yang berkaitan tentang fail yang dimuat naik, termasuk nama fail, saiz fail, jenis fail, dsb. Kemudian kami mengalihkan fail dari laluan sementara ke dalam direktori muat naik.

Perlu diambil perhatian bahawa apabila menggunakan penghuraian "gerun", anda perlu menetapkan "berbilang" kepada benar untuk menyokong muat naik berbilang fail. Kami juga boleh mengawal saiz fail yang dimuat naik, menyimpan laluan, dsb. dengan menetapkan parameter lain.

  1. Nyahzip fail

Apabila pelayan menerima fail yang dimampatkan, kami perlu menyahmampat fail sebelum kami boleh memulakan operasi kemas kini. Menyahmampat fail menggunakan Node.js juga sangat mudah, hanya gunakan modul "zlib" dan "fs" terbina dalam Node.js. Berikut ialah pelaksanaan kod penyahmampatan mudah:

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

const srcFileName = 'srcFile.txt.gz';
const destFileName = 'srcFile.txt';

// 创建解压流
const gunzip = zlib.createGunzip();
const inp = fs.createReadStream(srcFileName);
const out = fs.createWriteStream(destFileName);

inp.pipe(gunzip).pipe(out);

console.log('文件解压成功!');
Salin selepas log masuk

Sama seperti fungsi mampatan, kita juga boleh merangkumkan kod di atas ke dalam fungsi untuk kegunaan masa hadapan:

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

function uncompress(file) {
  const gunzip = zlib.createGunzip();
  const src = fs.createReadStream(file);
  const dest = fs.createWriteStream(file.replace('.gz', ''));

  src.pipe(gunzip).pipe(dest);

  console.log(`文件 ${file} 解压成功!`);
}
Salin selepas log masuk

"Fail" ialah Nama daripada fail yang dimampatkan untuk dinyahmampat, yang boleh menjadi laluan relatif atau laluan mutlak.

  1. Kerahkan kemas kini

Selepas penyahmampatan selesai, kami boleh mengalihkan fail ke direktori tempat aplikasi sedang berjalan, menulis ganti fail aplikasi asal dan menggunakan kemas kini di sekali Itu sahaja. Berikut ialah pelaksanaan kod mudah:

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

const appDir = 'app';

function deploy(file) {
  const fileName = path.basename(file);
  const destPath = path.join(appDir, fileName);

  fs.copyFile(file, destPath, (err) => {
    if (err) throw err;
    console.log(`文件 ${fileName} 部署成功!`);
  });
}
Salin selepas log masuk

"Fail" ialah nama fail dinyahmampat yang perlu digunakan, yang boleh menjadi laluan relatif atau laluan mutlak. appDir ialah direktori tempat aplikasi kami dijalankan.

  1. Kod lengkap

Akhir sekali, kami menyepadukan kod di atas dengan fungsi lengkap:

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

const appDir = 'app';

http.createServer((req, res) => {
  if (req.url === '/upload' && req.method.toLowerCase() === 'post') {
    const form = formidable({ multiples: true });

    form.parse(req, (err, fields, files) => {
      const oldPath = files.file.path;
      const newPath = __dirname + '/' + files.file.name;

      fs.rename(oldPath, newPath, (err) => {
        if (err) throw err;

        console.log('文件上传成功!');
        uncompress(newPath);
      });
    });

    return;
  }

  res.writeHead(200, { 'Content-Type': 'text/html' });
  res.end(`
    <form action="/upload" method="POST" enctype="multipart/form-data">
        <input type="file" name="file" multiple>
        <button type="submit">上传</button>
    </form>
  `);
}).listen(8080);

console.log('服务器启动成功!');

function compress(file) {
  const gzip = zlib.createGzip();
  const src = fs.createReadStream(file);
  const dest = fs.createWriteStream(file + '.gz');

  src.pipe(gzip).pipe(dest);

  console.log(`文件 ${file} 压缩成功!`);
}

function uncompress(file) {
  const gunzip = zlib.createGunzip();
  const src = fs.createReadStream(file);
  const dest = fs.createWriteStream(file.replace('.gz', ''));

  src.pipe(gunzip).pipe(dest);

  console.log(`文件 ${file} 解压成功!`);
  deploy(file.replace('.gz', ''));
}

function deploy(file) {
  const fileName = path.basename(file);
  const dest = path.join(appDir, fileName);

  fs.copyFile(file, dest, (err) => {
    if (err) throw err;
    console.log(`文件 ${fileName} 部署成功!`);
  });
}
Salin selepas log masuk

Kod di atas melaksanakan muat naik dan pemampatan fail ringkas, penyahmampatan , dan fungsi penggunaan boleh disesuaikan mengikut keperluan anda sendiri.

Atas ialah kandungan terperinci pakej termampat muat naik penyebaran nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!