ホームページ > ウェブフロントエンド > フロントエンドQ&A > nodejsデプロイメントの圧縮パッケージのアップロード

nodejsデプロイメントの圧縮パッケージのアップロード

WBOY
リリース: 2023-05-08 11:42:07
オリジナル
761 人が閲覧しました

現代の Web 開発では、Node.js を使用してバックエンド アプリケーションを構築することがトレンドになっています。アプリケーションは常に更新されるため、多くの場合、新しい更新バージョンをサーバーにデプロイする必要があります。したがって、この記事では、Node.js を使用して圧縮パッケージをデプロイおよびアップロードし、アプリケーションを高速、シンプル、効率的に更新する方法を紹介します。

  1. 圧縮ファイル

アップロードする前に、展開するファイルを Zip または tar.gz ファイルに圧縮する必要があります。 Node.js を使用してファイル圧縮を完了するのは非常に簡単で、Node.js の組み込みの「zlib」モジュールと「fs」モジュールを使用するだけで簡単にファイル圧縮を実現できます。以下は単純な圧縮コードです:

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('文件压缩成功!');
ログイン後にコピー

将来使用するために、上記のコードを関数にカプセル化できます:

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} 压缩成功!`);
}
ログイン後にコピー

ここで、「file」は圧縮する必要があるファイルの名前です。 、相対パスまたは絶対パスを指定できます。

  1. ファイルのアップロード

ファイルの圧縮が完了したら、圧縮ファイルをサーバーにアップロードする必要があります。ここでは、サードパーティのモジュールを使用してファイルのアップロード機能を実装できます。一般的に使用されるモジュールは「formidable」です。これは、ファイルのアップロード操作の処理に役立つ効率的なフォーム解析モジュールです。

まず、「formidable」をインストールする必要があります:

npm install formidable --save
ログイン後にコピー

次に、次のコードを使用してファイル アップロード機能を実装できます:

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('服务器启动成功!');
ログイン後にコピー

上記に示すようにコードでは、ポート 8080 でリッスンする HTTP サーバーを作成します。クライアントが URL「/upload」で POST リクエストをリクエストすると、「formidable」を使用して POST リクエスト内のファイル データを解析します。解析後、ファイル名、ファイルサイズ、ファイルタイプなど、アップロードされたファイルに関する関連情報を取得できます。次に、ファイルを一時パスからアップロード ディレクトリに移動します。

「強力な」解析を使用する場合、複数のファイルのアップロードをサポートするには「multiples」を true に設定する必要があることに注意してください。他のパラメータを設定することで、アップロードされるファイルのサイズ、保存パスなどを制御することもできます。

  1. ファイルを解凍する

サーバーが圧縮ファイルを受信したら、更新操作を開始する前にファイルを解凍する必要があります。 Node.js を使用したファイルの解凍も非常に簡単で、Node.js の組み込みの「zlib」および「fs」モジュールを使用するだけです。以下は、単純な解凍コードの実装です:

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('文件解压成功!');
ログイン後にコピー

圧縮関数と同様に、将来の使用のために上記のコードを関数にカプセル化することもできます:

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} 解压成功!`);
}
ログイン後にコピー

「ファイル」は次の名前です。解凍する圧縮ファイル。相対パスまたは絶対パスを指定できます。

  1. アップデートのデプロイ

解凍が完了したら、アプリケーションが実行されているディレクトリにファイルを移動し、元のアプリケーション ファイルを上書きして、アップデートをデプロイできます。一発で完成です。以下は、単純なコード実装です。

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} 部署成功!`);
  });
}
ログイン後にコピー

「ファイル」は、展開する必要がある解凍されたファイル名で、相対パスまたは絶対パスを指定できます。 appDir は、アプリケーションが実行されるディレクトリです。

  1. 完全なコード

最後に、コードを上記の完全な関数と統合します。

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} 部署成功!`);
  });
}
ログイン後にコピー

上記のコードは、単純なファイルのアップロードと圧縮、解凍を実装します。 、展開機能は独自のニーズに応じてカスタマイズできます。

以上がnodejsデプロイメントの圧縮パッケージのアップロードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート