Rumah  >  Artikel  >  hujung hadapan web  >  Bagaimana untuk memuat turun fail dalam nodejs

Bagaimana untuk memuat turun fail dalam nodejs

王林
王林asal
2023-05-27 20:43:051449semak imbas

Dalam Node.js, anda boleh menggunakan modul node-fetch dan fs untuk memuat turun fail. Berikut ialah cara menggunakan kedua-dua modul ini untuk memuat turun fail.

Mula-mula anda perlu memasang modul pengambilan nod dan fs. Anda boleh menggunakan arahan npm untuk memasang:

npm install node-fetch fs

Selepas pemasangan selesai, anda boleh menggunakan dua modul ini.

Muat turun fail

Proses memuat turun fail boleh dibahagikan kepada beberapa langkah:

  1. Hantar permintaan HTTP untuk mendapatkan data fail
  2. Tulis data Fail

Berikut ialah contoh kod untuk memuat turun fail:

const fetch = require('node-fetch');
const fs = require('fs');

const downloadFile = async (url, dest) => {
  const response = await fetch(url);

  if (!response.ok) {
    throw new Error(`failed to download file: ${response.statusText}`);
  }

  const fileStream = fs.createWriteStream(dest);
  await new Promise((resolve, reject) => {
    response.body.pipe(fileStream);
    response.body.on("error", (err) => {
      reject(err);
    });
    fileStream.on("finish", function() {
      resolve();
    });
  });
};

const fileUrl = 'https://example.com/files/file.txt';
const destPath = 'file.txt';

downloadFile(fileUrl, destPath)
  .then(() => {
    console.log('file downloaded successfully');
  })
  .catch((err) => {
    console.error('failed to download file:', err);
  });

Kod ini mula-mula menggunakan modul pengambilan nod untuk menghantar permintaan HTTP untuk mendapatkan data fail, dan kemudian menggunakan modul fs untuk menulis data ke fail . Perlu diingatkan bahawa semasa proses mendapatkan data fail, anda perlu menyemak sama ada kod status respons HTTP ialah 200. Jika tidak, muat turun gagal.

Kod menggunakan sintaks tak segerak/menunggu sintaks tak segerak dan objek Promise untuk memastikan data fail ditulis sebelum hasilnya dikeluarkan.

Lebih banyak pilihan

Kod sampel di atas hanyalah contoh mudah untuk memuat turun fail, jika anda memerlukan lebih banyak pilihan dan fungsi, anda boleh melaraskan kod dengan parameter lain.

  1. Tentukan pengepala permintaan HTTP

Anda boleh menggunakan parameter pengepala nod-fetch untuk menentukan pengepala permintaan HTTP, contohnya:

const headers = {
  'Authorization': 'Bearer ' + token,
  'Content-Type': 'application/json'
};
const response = await fetch(url, {
  headers: headers
});
  1. Hadkan Kelajuan muat turun

Jika anda perlu mengehadkan kelajuan muat turun, anda boleh menggunakan talian laju modul pihak ketiga, contohnya:

const speedline = require('speedline');

const fileUrl = 'https://example.com/files/file.txt';
const destPath = 'file.txt';
const maxSpeed = 100; // 100 KB/s

const response = await fetch(fileUrl);
const stream = response.body;
const fileStream = fs.createWriteStream(destPath);
await speedline(stream.pipe(fileStream), maxSpeed);
  1. Cache fail yang dimuat turun

Jika anda perlu cache Untuk memuat turun fail, anda boleh menggunakan modul pihak ketiga nod-cache, contohnya:

const NodeCache = require('node-cache');
const fileCache = new NodeCache();

const downloadFile = async (url, dest) => {
  const cachedData = fileCache.get(url);
  if (cachedData) {
    return fs.writeFileSync(dest, cachedData);
  }
  
  const response = await fetch(url);

  if (!response.ok) {
    throw new Error(`failed to download file: ${response.statusText}`);
  }

  const fileData = await response.text();

  fileCache.set(url, fileData);
  fs.writeFileSync(dest, fileData);
};

Di atas ialah pengetahuan asas dan kod contoh untuk memuat turun fail dengan Node.js. Mengikut keperluan sebenar dan persekitaran rangkaian, anda boleh memilih parameter dan kaedah yang sesuai dengan anda untuk memuat turun fail.

Atas ialah kandungan terperinci Bagaimana untuk memuat turun fail dalam nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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