Home  >  Article  >  Web Front-end  >  How to verify whether the download is successful in nodejs

How to verify whether the download is successful in nodejs

WBOY
WBOYOriginal
2023-05-17 09:31:06771browse

NodeJS is a JavaScript programming language that runs on the server side. Its emergence greatly facilitates the development of web applications. Among many NodeJS applications, downloading is the most common operation, and how to verify whether a download is successful is also an inevitable problem in web development. This article will introduce how to use NodeJS to verify whether the download is successful.

In NodeJS, you can use http, https, request and other modules to download files. Use the http or https module to download remote files and save them locally; while the request module is more advanced and can automatically handle operations such as redirection, domain name acquisition, and cookies.

No matter which module is used, whether the file download is successful or failed, the download status can be judged by the statusCode attribute of the returned object. If statusCode is equal to 200, it means the download is successful, and if statusCode is equal to other values, it means the download failed.

For example, use the http module to download a file:

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); // 输出状态码
});

In the above code, when the response returns successfully, its data is saved to the file.pdf file and the status code is printed out. If statusCode equals 200, it means the download is successful. If the download fails, it needs to be handled by listening to the 'error' event.

Compared with the http module, the download verification of the request module will be more convenient. For example:

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);
    });

In this example, use the request.get method to send a request, and listen to the 'response' event to determine whether the download is successful. If the statusCode of the response is 200, it means the download was successful. Download failure also needs to be handled by listening to the 'error' event.

When downloading large files, we may be more concerned about the download progress. The request module can obtain each piece of downloaded data by listening to the 'data' event to calculate the download progress.

For example, download a file of about 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); // 将响应数据写入文件

In this example, use req.response.headers['content-length'] to get the total size of the file, by calculating the received The amount of data and the total file size to get the download progress. At the same time, use the req.on('data') event to monitor the data stream and obtain each piece of downloaded data.

While verifying that the download is successful, we may also need to verify the integrity of the file. In NodeJS, you can also use the methods provided by the fs module to create file hashes, compare hashes, etc. to check the MD5 value of the file to ensure the integrity of the file.

For example, verify the MD5 value of a downloaded file:

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)); // 比较期望的文件哈希值和实际哈希值
});

In this example, use the fs.createReadStream method to obtain the file stream and create it via crypto.createHash('md5') An MD5 hash object that uses the stream.on('data') event to continuously update the hash value. After the file streaming is completed, the actual file hash value is obtained through hash.digest('hex'), and finally the expected and actual hash values ​​are compared to verify the integrity of the file.

When downloading a file, verifying that the download is successful is only the first step, and verifying the integrity of the file is the key to ensuring data security. Through the methods introduced above, we can quickly verify the download success and integrity of files in NodeJS, thereby improving the security and stability of web applications.

The above is the detailed content of How to verify whether the download is successful in nodejs. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn