


Bagaimana untuk melaksanakan pemindahan HTTP fail besar berdasarkan nodejs? (Perkongsian kaedah praktikal)
Bagaimana untuk melaksanakan pemindahan HTTP bagi fail besar berdasarkan nod? Artikel berikut akan memperkenalkan kepada anda beberapa penyelesaian pemindahan fail http yang praktikal berdasarkan nodejs Saya harap ia akan membantu anda!
Penyelesaian pemindahan fail http berdasarkan nodejs memainkan peranan penting dalam pembangunan tindanan penuh hadapan dan belakang dalam hal ini artikel, saya akan melalui beberapa penyelesaian A untuk merealisasikan penghantaran HTTP fail besar. Sebelum melaksanakan fungsi, kami mula-mula menulis fail besar melalui modul fs nodejs dan menjana fail setempat dalam projek:
const fs = require('fs'); const writeStream = fs.createWriteStream(__dirname + "/file.txt"); for(let i = 0;i <= 100000; i++) { writeStream.write(`${i} —— 我是${i}号文件\n`, "utf-8"); } writeStream.end();
Selepas kod di atas berjalan dengan jayanya , fail teks dengan saiz 3.2MB akan dijana dalam direktori pelaksanaan semasa, yang akan digunakan sebagai "bahan fail besar" untuk program berikut. Sebelum menyenaraikan skema pemindahan fail besar, kami mula-mula merangkum dua kaedah awam yang akan digunakan kemudian: 文件读取方法
dan 文件压缩方法
:
// 封装读取文件的方法 const readFile = async (paramsData) => { return new Promise((resolve, reject) => { fs.readFile(paramsData, (err, data) => { if(err) { reject('文件读取错误'); } else { resolve(data); } }) }) } // 封装文件压缩方法 const gzip = async (paramsData) => { return new Promise((resolve, reject) => { zlib.gzip(paramsData, (err, result) => { if(err) { reject('文件压缩错误'); } else { resolve(result); } }) }) }
1. Melalui fail besar Dihantar selepas pemampatan data
Apabila penyemak imbas menghantar permintaan, ia akan membawa accept
dan accept-*
maklumat pengepala permintaan, yang digunakan untuk memberitahu pelayan jenis fail yang disokong oleh semasa penyemak imbas, Senarai format mampatan yang disokong dan bahasa yang disokong. Medan Accept-Encoding
dalam pengepala permintaan digunakan untuk memberitahu pelayan kaedah pengekodan kandungan (biasanya algoritma pemampatan tertentu) yang boleh difahami oleh pelanggan. Pelayan akan memilih kaedah yang disokong oleh klien dan memberitahu klien tentang pilihan tersebut melalui pengepala respons Content-Encoding
Pengepala respons memberitahu penyemak imbas bahawa skrip JS yang dikembalikan telah diproses oleh gzip
algoritma pemampatan
// 请求头 accept-encoding: gzip, deflate, br
// 响应头 cache-control: max-age=2592000 content-encoding: gzip content-type: application/x-javascript
dan Accept-Encoding
, mari sahkan kesan tidak menghidupkan Content-Encoding
dan menghidupkan gzip
. gzip
// 实现一个简单的文件读取服务器(没有开启gzip) const server = http.createServer(async (req, res) => { res.writeHead(200, { "Content-Type": "text/plain;charset=utf-8", }); const buffer = await readFile(__dirname + '/file.txt'); res.write(buffer); res.end(); }) server.listen(3000, () => { console.log(`server启动成功`) })
// 实现一个简单的文件读取服务器(开启gzip) const server = http.createServer(async(req, res) => { res.writeHead(200, { "Content-Type": "text/plain;charset=utf-8", "Content-Encoding": "gzip" }); const buffer = await readFile(__dirname + '/file.txt'); const gzipData = await gzip(buffer); res.write(gzipData); res.end(); }) server.listen(3000, () => { console.log(`server启动成功`) })
2. Penghantaran melalui data chunking
Apabila terdapat senario di mana jadual HTML yang besar perlu dijana menggunakan data yang diperoleh daripada pertanyaan pangkalan data, atau apabila sejumlah besar imej perlu dihantar, ini boleh dicapai melalui penghantaran blok.Transfer-Encoding: chunked Transfer-Encoding: gzip, chunked
dalam pengepala respons ialah Transfer-Encoding
, menunjukkan bahawa data dihantar dalam satu siri ketulan. Perlu diingatkan bahawa kedua-dua medan chunked
dan Transfer-Encoding
adalah saling eksklusif, yang bermaksud bahawa kedua-dua medan ini tidak boleh muncul pada masa yang sama dalam mesej respons. Content-Length
// 数据分块传输 const spilitChunks = async () =>{ const buffer = await readFile(__dirname + '/file.txt'); const lines = buffer.toString('utf-8').split('\n'); let [chunks, i, n] = [[], 0, lines.length]; while(i < n) { chunks.push(lines.slice(i, i+= 10)); }; return chunks; } const server = http.createServer(async(req, res) => { res.writeHead(200, { "Content-Type": "text/plain;charset=utf-8", "Transfer-Encoding": "chunked", "Access-Control-Allow-Origin": "*", }); const chunks = await spilitChunks(); for(let i =0; i< chunks.length; i++) { setTimeout(() => { let content = chunks[i].join("&"); res.write(`${content.length.toString(16)}\r\n${content}\r\n`); }, i * 1000); } setTimeout(() => { res.end(); }, chunks.length * 1000); }) server.listen(3000, () => { console.log(`server启动成功`) })
3 Hantar melalui aliran data
Apabila menggunakan untuk mengembalikan fail besar kepada klien, gunakan strim Returning aliran fail dalam bentuk boleh mengelakkan daripada menduduki terlalu banyak memori semasa memproses fail besar. Pelaksanaan khusus adalah seperti berikut. Apabila menggunakan strim untuk mengembalikan data fail, nilai medan pengepala respons HTTP Node.js
ialah Transfer-Encoding
, menunjukkan bahawa data dihantar dalam satu siri ketulan. chunked
const server = http.createServer((req, res) => { res.writeHead(200, { "Content-Type": "text/plain;charset=utf-8", "Content-Encoding": "gzip", "Transfer-Encoding": "chunked" }); fs.createReadStream(__dirname + "/file.txt") .setEncoding("utf-8") .pipe(zlib.createGzip()) .pipe(res); }) server.listen(3000, () => { console.log(`server启动成功`) })
tutorial nodejs! !
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pemindahan HTTP fail besar berdasarkan nodejs? (Perkongsian kaedah praktikal). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Node.js boleh digunakan sebagai rangka kerja bahagian belakang kerana ia menawarkan ciri seperti prestasi tinggi, kebolehskalaan, sokongan merentas platform, ekosistem yang kaya dan kemudahan pembangunan.

Terdapat dua fail berkaitan npm dalam direktori pemasangan Node.js: npm dan npm.cmd Perbezaannya adalah seperti berikut: sambungan berbeza: npm ialah fail boleh laku dan npm.cmd ialah pintasan tetingkap arahan. Pengguna Windows: npm.cmd boleh digunakan daripada command prompt, npm hanya boleh dijalankan dari baris arahan. Keserasian: npm.cmd adalah khusus untuk sistem Windows, npm tersedia merentas platform. Cadangan penggunaan: Pengguna Windows menggunakan npm.cmd, sistem pengendalian lain menggunakan npm.

Ya, Node.js ialah bahasa pembangunan bahagian belakang. Ia digunakan untuk pembangunan bahagian belakang, termasuk mengendalikan logik perniagaan sebelah pelayan, mengurus sambungan pangkalan data dan menyediakan API.

Pembolehubah global berikut wujud dalam Node.js: Objek global: modul Teras global: proses, konsol, memerlukan pembolehubah persekitaran Runtime: __dirname, __filename, __line, __column Constants: undefined, null, NaN, Infinity, -Infinity

Perbezaan utama antara Node.js dan Java ialah reka bentuk dan ciri: Didorong peristiwa vs. didorong benang: Node.js dipacu peristiwa dan Java dipacu benang. Satu-benang vs. berbilang benang: Node.js menggunakan gelung acara satu-benang dan Java menggunakan seni bina berbilang benang. Persekitaran masa jalan: Node.js berjalan pada enjin JavaScript V8, manakala Java berjalan pada JVM. Sintaks: Node.js menggunakan sintaks JavaScript, manakala Java menggunakan sintaks Java. Tujuan: Node.js sesuai untuk tugas intensif I/O, manakala Java sesuai untuk aplikasi perusahaan besar.

Node.js dan Java masing-masing mempunyai kebaikan dan keburukan dalam pembangunan web, dan pilihan bergantung pada keperluan projek. Node.js cemerlang dalam aplikasi masa nyata, pembangunan pesat dan seni bina perkhidmatan mikro, manakala Java cemerlang dalam sokongan, prestasi dan keselamatan gred perusahaan.

Langkah-langkah penggunaan pelayan untuk projek Node.js: Sediakan persekitaran penggunaan: dapatkan akses pelayan, pasang Node.js, sediakan repositori Git. Bina aplikasi: Gunakan npm run build untuk menjana kod dan kebergantungan yang boleh digunakan. Muat naik kod ke pelayan: melalui Git atau Protokol Pemindahan Fail. Pasang kebergantungan: SSH ke dalam pelayan dan gunakan pemasangan npm untuk memasang kebergantungan aplikasi. Mulakan aplikasi: Gunakan arahan seperti node index.js untuk memulakan aplikasi, atau gunakan pengurus proses seperti pm2. Konfigurasikan proksi terbalik (pilihan): Gunakan proksi terbalik seperti Nginx atau Apache untuk menghalakan trafik ke aplikasi anda

Untuk menyambung ke pangkalan data MySQL, anda perlu mengikuti langkah berikut: Pasang pemacu mysql2. Gunakan mysql2.createConnection() untuk mencipta objek sambungan yang mengandungi alamat hos, port, nama pengguna, kata laluan dan nama pangkalan data. Gunakan connection.query() untuk melaksanakan pertanyaan. Akhir sekali gunakan connection.end() untuk menamatkan sambungan.
