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.
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('文件压缩成功!');
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} 压缩成功!`); }
"Fail" ialah nama fail yang perlu dimampatkan , yang boleh menjadi laluan relatif atau laluan mutlak.
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
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('服务器启动成功!');
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.
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('文件解压成功!');
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} 解压成功!`); }
"Fail" ialah Nama daripada fail yang dimampatkan untuk dinyahmampat, yang boleh menjadi laluan relatif atau laluan mutlak.
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} 部署成功!`); }); }
"Fail" ialah nama fail dinyahmampat yang perlu digunakan, yang boleh menjadi laluan relatif atau laluan mutlak. appDir
ialah direktori tempat aplikasi kami dijalankan.
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} 部署成功!`); }); }
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!