Heim > Web-Frontend > Front-End-Fragen und Antworten > NodeJS-Bereitstellung komprimiertes Paket hochladen

NodeJS-Bereitstellung komprimiertes Paket hochladen

WBOY
Freigeben: 2023-05-08 11:42:07
Original
761 Leute haben es durchsucht

In der modernen Webentwicklung ist die Verwendung von Node.js zum Erstellen von Back-End-Anwendungen zu einem Trend geworden. Da Anwendungen ständig aktualisiert werden, müssen wir häufig neue aktualisierte Versionen auf dem Server bereitstellen. Daher wird in diesem Artikel erläutert, wie Sie mit Node.js komprimierte Pakete bereitstellen und hochladen, um schnelle, einfache und effiziente Anwendungsaktualisierungen zu erzielen.

  1. Komprimierte Dateien

Vor dem Hochladen müssen wir die Dateien, die bereitgestellt werden müssen, in eine Zip- oder tar.gz-Datei komprimieren. Es ist sehr einfach, Node.js zum Abschließen der Dateikomprimierung zu verwenden. Sie müssen lediglich die integrierten Module „zlib“ und „fs“ von Node.js verwenden, um eine einfache Dateikomprimierung zu erreichen. Das Folgende ist ein einfacher Komprimierungscode:

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('文件压缩成功!');
Nach dem Login kopieren

Wir können den obigen Code für die zukünftige Verwendung in eine Funktion kapseln:

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} 压缩成功!`);
}
Nach dem Login kopieren

Die „Datei“ ist der Name der Datei, die komprimiert werden muss. Dies kann ein relativer Pfad oder sein ein absoluter Weg.

  1. Dateien hochladen

Nach Abschluss der Dateikomprimierung müssen wir die komprimierte Datei auf den Server hochladen. Hier können wir Module von Drittanbietern verwenden, um die Funktion zum Hochladen von Dateien zu implementieren. Ein häufig verwendetes Modul ist „formidable“, ein effizientes Formularanalysemodul, das uns bei der Abwicklung von Datei-Upload-Vorgängen helfen kann.

Zuerst müssen wir „formidable“ installieren:

npm install formidable --save
Nach dem Login kopieren

Dann können wir den folgenden Code verwenden, um die Funktion zum Hochladen von Dateien zu implementieren:

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('服务器启动成功!');
Nach dem Login kopieren

Wie im obigen Code gezeigt, erstellen wir einen HTTP-Server mit dem Überwachungsport 8080 . Wenn der Client eine POST-Anfrage mit der URL „/upload“ anfordert, verwenden wir „formidable“, um die Dateidaten in der POST-Anfrage zu analysieren. Nach dem Parsen können wir relevante Informationen über die hochgeladene Datei erhalten, einschließlich Dateiname, Dateigröße, Dateityp usw. Anschließend verschieben wir die Dateien vom temporären Pfad in das Upload-Verzeichnis.

Es ist zu beachten, dass Sie bei Verwendung von „formidable“ Parsing „multiples“ auf „true“ setzen müssen, um das Hochladen mehrerer Dateien zu unterstützen. Wir können auch die Größe der hochgeladenen Datei, den Speicherpfad usw. steuern, indem wir andere Parameter festlegen.

  1. Extrahieren Sie die Datei

Nachdem der Server die komprimierte Datei empfangen hat, müssen wir die Datei dekomprimieren, bevor wir den Aktualisierungsvorgang starten können. Das Dekomprimieren von Dateien mit Node.js ist ebenfalls sehr einfach. Verwenden Sie einfach die integrierten Module „zlib“ und „fs“ von Node.js. Das Folgende ist eine einfache Dekomprimierungscode-Implementierung:

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('文件解压成功!');
Nach dem Login kopieren

Genau wie bei der Komprimierungsfunktion können wir auch den obigen Code für die zukünftige Verwendung in eine Funktion kapseln:

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} 解压成功!`);
}
Nach dem Login kopieren

Die „Datei“ ist der Name der komprimierten Datei, die komprimiert werden muss dekomprimiert. Handelt es sich um einen relativen oder einen absoluten Pfad?

  1. Update bereitstellen

Nach Abschluss der Dekomprimierung können wir die Datei in das Verzeichnis verschieben, in dem die Anwendung ausgeführt wird, die ursprüngliche Anwendungsdatei überschreiben und die Bereitstellungs- und Aktualisierungsarbeiten sind einmal abgeschlossen. Das Folgende ist eine einfache Code-Implementierung:

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} 部署成功!`);
  });
}
Nach dem Login kopieren

Die „Datei“ ist der dekomprimierte Dateiname, der bereitgestellt werden muss. Dies kann ein relativer oder absoluter Pfad sein. appDir ist das Verzeichnis, in dem unsere Anwendung ausgeführt wird.

  1. Vollständiger Code

Abschließend haben wir den obigen Code mit vollständigen Funktionen integriert:

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} 部署成功!`);
  });
}
Nach dem Login kopieren

Der obige Code implementiert einfache Datei-Upload-, Komprimierungs-, Dekomprimierungs- und Bereitstellungsfunktionen, die an Ihre eigenen Bedürfnisse angepasst werden können.

Das obige ist der detaillierte Inhalt vonNodeJS-Bereitstellung komprimiertes Paket hochladen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage