package compressé de téléchargement de déploiement nodejs

WBOY
Libérer: 2023-05-08 11:42:07
original
736 Les gens l'ont consulté

Dans le développement Web moderne, utiliser Node.js pour créer des applications back-end est devenu une tendance. Les applications étant constamment mises à jour, nous devons souvent déployer de nouvelles versions mises à jour sur le serveur. Par conséquent, cet article explique comment utiliser Node.js pour déployer et télécharger des packages compressés afin d'obtenir des mises à jour d'applications rapides, simples et efficaces.

  1. Fichiers compressés

Avant le téléchargement, nous devons compresser les fichiers qui doivent être déployés dans un fichier Zip ou tar.gz. Il est très simple d'utiliser Node.js pour terminer la compression de fichiers. Il vous suffit d'utiliser les modules "zlib" et "fs" intégrés de Node.js pour réaliser facilement la compression de fichiers. Ce qui suit est un simple code de compression :

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('文件压缩成功!');
Copier après la connexion

Nous pouvons encapsuler le code ci-dessus dans une fonction pour une utilisation future :

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} 压缩成功!`);
}
Copier après la connexion

Le "fichier" est le nom du fichier qui doit être compressé, qui peut être un chemin relatif ou un chemin absolu.

  1. Télécharger des fichiers

Après avoir terminé la compression du fichier, nous devons télécharger le fichier compressé sur le serveur. Ici, nous pouvons utiliser des modules tiers pour implémenter la fonction de téléchargement de fichiers. Un module couramment utilisé est "formidable", qui est un module d'analyse de formulaire efficace qui peut nous aider à gérer les opérations de téléchargement de fichiers.

Tout d'abord, nous devons installer "formidable" :

npm install formidable --save
Copier après la connexion

Ensuite, nous pouvons utiliser le code suivant pour implémenter la fonction de téléchargement de fichiers :

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('服务器启动成功!');
Copier après la connexion

Comme le montre le code ci-dessus, nous créons un serveur HTTP avec le port d'écoute 8080 . Lorsque le client demande une requête POST avec l'URL "/upload", nous utilisons "formidable" pour analyser les données du fichier dans la requête POST. Après l'analyse, nous pouvons obtenir des informations pertinentes sur le fichier téléchargé, notamment le nom du fichier, la taille du fichier, le type de fichier, etc. Ensuite, nous déplaçons les fichiers du chemin temporaire vers le répertoire de téléchargement.

Il convient de noter que lorsque vous utilisez une analyse "formidable", vous devez définir "multiples" sur true pour prendre en charge le téléchargement de plusieurs fichiers. Nous pouvons également contrôler la taille du fichier téléchargé, le chemin de sauvegarde, etc. en définissant d'autres paramètres.

  1. Extraire le fichier

Une fois que le serveur a reçu le fichier compressé, nous devons décompresser le fichier avant de pouvoir démarrer l'opération de mise à jour. Il est également très simple de décompresser des fichiers à l'aide de Node.js. Il vous suffit d'utiliser les modules "zlib" et "fs" intégrés de Node.js. Ce qui suit est une simple implémentation de code de décompression :

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('文件解压成功!');
Copier après la connexion

Identique à la fonction de compression, nous pouvons également encapsuler le code ci-dessus dans une fonction pour une utilisation future :

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} 解压成功!`);
}
Copier après la connexion

Le "fichier" est le nom du fichier compressé qui doit être décompressé. Est-ce un chemin relatif ou un chemin absolu.

  1. Déployer la mise à jour

Après avoir terminé la décompression, nous pouvons déplacer le fichier vers le répertoire où l'application est en cours d'exécution, écraser le fichier d'application d'origine, et le travail de déploiement et de mise à jour est terminé une fois. Ce qui suit est une implémentation de code simple :

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} 部署成功!`);
  });
}
Copier après la connexion

Le "fichier" est le nom du fichier décompressé qui doit être déployé, qui peut être un chemin relatif ou un chemin absolu. appDir est le répertoire dans lequel notre application s'exécute.

  1. Code complet

Enfin, nous avons intégré le code avec les fonctions complètes ci-dessus :

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} 部署成功!`);
  });
}
Copier après la connexion

Le code ci-dessus implémente des fonctions simples de téléchargement, de compression, de décompression et de déploiement de fichiers, qui peuvent être personnalisées en fonction de vos propres besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!