Bagaimana untuk mengesahkan sama ada muat turun berjaya dalam nodejs

WBOY
Lepaskan: 2023-05-17 09:31:06
asal
770 orang telah melayarinya

NodeJS ialah bahasa pengaturcaraan JavaScript yang berjalan di bahagian pelayan. Kemunculannya sangat memudahkan pembangunan aplikasi web. Di antara banyak aplikasi NodeJS, muat turun ialah operasi yang paling biasa, dan cara mengesahkan sama ada muat turun berjaya juga merupakan masalah yang tidak dapat dielakkan dalam pembangunan web. Artikel ini akan memperkenalkan cara menggunakan NodeJS untuk mengesahkan sama ada muat turun berjaya.

Dalam NodeJS, anda boleh menggunakan http, https, permintaan dan modul lain untuk memuat turun fail. Gunakan modul http atau https untuk memuat turun fail jauh dan menyimpannya secara setempat manakala modul permintaan lebih maju dan boleh mengendalikan operasi secara automatik seperti pengalihan, pemerolehan nama domain dan kuki.

Tidak kira modul mana yang digunakan, sama ada muat turun fail berjaya atau gagal, status muat turun boleh dinilai oleh atribut statusCode objek yang dikembalikan. Jika statusCode bersamaan dengan 200, ini bermakna muat turun berjaya, dan jika statusCode adalah sama dengan nilai lain, ini bermakna muat turun gagal.

Contohnya, menggunakan modul http untuk memuat turun fail:

const http = require('http');
const fs = require('fs');

const file = fs.createWriteStream("file.pdf"); // 创建文件写入流
const request = http.get("http://example.com/file.pdf", function(response) {
    response.pipe(file); // 将响应数据写入文件
    console.log("statusCode: ", response.statusCode); // 输出状态码
});
Salin selepas log masuk

Dalam kod di atas, apabila respons berjaya dikembalikan, datanya disimpan ke fail file.pdf dan kod status dicetak. Jika statusCode bersamaan dengan 200, ini bermakna muat turun berjaya. Jika muat turun gagal, ia perlu dikendalikan dengan mendengar acara 'error'.

Berbanding dengan modul http, pengesahan muat turun modul permintaan akan lebih mudah. Contohnya:

const fs = require('fs');
const request = require('request');

const file = fs.createWriteStream('file.pdf'); // 创建文件写入流
request.get('http://example.com/file.pdf') // 发送请求
    .on('response', function(response) { // 监听响应事件
        if(response.statusCode == 200) { // 判断响应状态码
            response.pipe(file); // 将响应数据写入文件
        }
    })
    .on('error', function(error) { // 监听下载错误事件
        console.log(error);
    });
Salin selepas log masuk

Dalam contoh ini, gunakan kaedah request.get untuk menghantar permintaan dan dengar acara 'respons' untuk menentukan sama ada muat turun berjaya. Jika Kod status respons ialah 200, ini bermakna muat turun berjaya. Kegagalan muat turun juga perlu dikendalikan dengan mendengar acara 'error'.

Apabila memuat turun fail besar, kami mungkin lebih mengambil berat tentang kemajuan muat turun. Modul permintaan boleh mendapatkan setiap bahagian data yang dimuat turun dengan mendengar acara 'data' untuk mengira kemajuan muat turun.

Sebagai contoh, muat turun fail kira-kira 100MB:

const fs = require('fs');
const request = require('request');

const file = fs.createWriteStream('file.pdf'); // 创建文件写入流
const url = 'http://example.com/file.pdf';
let receivedSize = 0;

const req = request.get(url); // 发送请求
req.on('data', function(data) { // 监听数据事件
    receivedSize += data.length; // 计算已接收的文件大小
    const progress = (receivedSize / req.response.headers['content-length']) * 100; // 计算下载进度
    console.log('progress:', progress.toFixed(2) + '%'); // 打印下载进度
})
.on('error', function(error) { // 监听下载错误事件
    console.log(error);
})
.pipe(file); // 将响应数据写入文件
Salin selepas log masuk

Dalam contoh ini, gunakan req.response.headers['content-length'] untuk mendapatkan jumlah saiz fail, dikira oleh Jumlah data dan jumlah saiz fail untuk mendapatkan kemajuan muat turun. Pada masa yang sama, gunakan acara req.on('data') untuk memantau aliran data dan mendapatkan setiap bahagian data yang dimuat turun.

Semasa mengesahkan bahawa muat turun berjaya, kami juga mungkin perlu mengesahkan integriti fail. Dalam NodeJS, anda juga boleh menggunakan kaedah yang disediakan oleh modul fs untuk mencipta cincang fail, membandingkan cincang, dsb. untuk menyemak nilai MD5 fail bagi memastikan integriti fail.

Contohnya, sahkan nilai MD5 bagi fail yang dimuat turun:

const fs = require('fs');
const crypto = require('crypto');

const file = 'file.pdf';
const expectedHash = '9d7d60e575578bcf5c0754510d105efa'; // 文件的期望MD5值
const hash = crypto.createHash('md5');
const stream = fs.createReadStream(file);

stream.on('data', function(data) {
    hash.update(data); // 更新哈希值
});
stream.on('end', function() {
    const digest = hash.digest('hex'); // 获取文件哈希值
    console.log('digest:', digest);
    console.log('hash comparison:', (expectedHash === digest)); // 比较期望的文件哈希值和实际哈希值
});
Salin selepas log masuk

Dalam contoh ini, gunakan kaedah fs.createReadStream untuk mendapatkan strim fail dan menciptanya melalui crypto.createHash('md5 ') Objek cincang MD5 yang menggunakan acara stream.on('data') untuk mengemas kini nilai cincang secara berterusan. Selepas penstriman fail selesai, nilai cincang fail sebenar diperoleh melalui hash.digest('hex'), dan akhirnya nilai cincang yang dijangka dan sebenar dibandingkan untuk mengesahkan integriti fail.

Apabila memuat turun fail, mengesahkan bahawa muat turun berjaya hanyalah langkah pertama Mengesahkan integriti fail adalah kunci untuk memastikan keselamatan data. Melalui kaedah yang diperkenalkan di atas, kami boleh dengan cepat mengesahkan kejayaan muat turun dan integriti fail dalam NodeJS, sekali gus meningkatkan keselamatan dan kestabilan aplikasi web.

Atas ialah kandungan terperinci Bagaimana untuk mengesahkan sama ada muat turun berjaya dalam nodejs. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!