Rumah hujung hadapan web tutorial js Bagaimana untuk melaksanakan pemindahan HTTP fail besar berdasarkan nodejs? (Perkongsian kaedah praktikal)

Bagaimana untuk melaksanakan pemindahan HTTP fail besar berdasarkan nodejs? (Perkongsian kaedah praktikal)

Jan 17, 2022 pm 07:16 PM
http nodejs Pindahkan fail

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!

Bagaimana untuk melaksanakan pemindahan HTTP fail besar berdasarkan nodejs? (Perkongsian kaedah praktikal)

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();
Salin selepas log masuk

Bagaimana untuk melaksanakan pemindahan HTTP fail besar berdasarkan nodejs? (Perkongsian kaedah praktikal)

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(&#39;文件读取错误&#39;);
      } else {
        resolve(data);
      }
    })
  })
}

// 封装文件压缩方法
const gzip = async (paramsData) => {
  return new Promise((resolve, reject) => {
    zlib.gzip(paramsData, (err, result) => {
      if(err) {
        reject(&#39;文件压缩错误&#39;);
      } else {
        resolve(result);
      }
    })
  })
}
Salin selepas log masuk

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
Salin selepas log masuk
// 响应头
cache-control: max-age=2592000 
content-encoding: gzip 
content-type: application/x-javascript
Salin selepas log masuk
Berdasarkan pemahaman medan

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 + &#39;/file.txt&#39;);
  res.write(buffer);
  res.end();
})
server.listen(3000, () => {
  console.log(`server启动成功`)
})
Salin selepas log masuk

Bagaimana untuk melaksanakan pemindahan HTTP fail besar berdasarkan nodejs? (Perkongsian kaedah praktikal)

// 实现一个简单的文件读取服务器(开启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 + &#39;/file.txt&#39;);
  const gzipData = await gzip(buffer);
  res.write(gzipData);
  res.end();
})
server.listen(3000, () => {
  console.log(`server启动成功`)
})
Salin selepas log masuk

Bagaimana untuk melaksanakan pemindahan HTTP fail besar berdasarkan nodejs? (Perkongsian kaedah praktikal)

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
Salin selepas log masuk
Nilai medan

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 + &#39;/file.txt&#39;);
  const lines = buffer.toString(&#39;utf-8&#39;).split(&#39;\n&#39;);
  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启动成功`)
})
Salin selepas log masuk

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启动成功`)
})
Salin selepas log masuk
Untuk lebih banyak pengetahuan berkaitan nod, sila lawati:

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Adakah nodejs rangka kerja bahagian belakang? Adakah nodejs rangka kerja bahagian belakang? Apr 21, 2024 am 05:09 AM

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.

Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apakah perbezaan antara fail npm dan npm.cmd dalam direktori pemasangan nodejs? Apr 21, 2024 am 05:18 AM

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.

Adakah nodejs bahasa pembangunan bahagian belakang? Adakah nodejs bahasa pembangunan bahagian belakang? Apr 21, 2024 am 05:09 AM

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.

Apakah pembolehubah global dalam nodejs Apakah pembolehubah global dalam nodejs Apr 21, 2024 am 04:54 AM

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

Adakah terdapat perbezaan besar antara nodejs dan java? Adakah terdapat perbezaan besar antara nodejs dan java? Apr 21, 2024 am 06:12 AM

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.

Mana satu untuk dipilih antara nodejs dan java? Mana satu untuk dipilih antara nodejs dan java? Apr 21, 2024 am 04:40 AM

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.

Bagaimana untuk menggunakan projek nodejs ke pelayan Bagaimana untuk menggunakan projek nodejs ke pelayan Apr 21, 2024 am 04:40 AM

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

Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql Bagaimana untuk menyambungkan nodejs ke pangkalan data mysql Apr 21, 2024 am 06:13 AM

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.

See all articles