Home Web Front-end Front-end Q&A How to verify whether the download is successful in nodejs

How to verify whether the download is successful in nodejs

May 17, 2023 am 09:31 AM

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

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);
    });
Copy after login

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); // 将响应数据写入文件
Copy after login

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

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 of this Website
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

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

React's Role in HTML: Enhancing User Experience React's Role in HTML: Enhancing User Experience Apr 09, 2025 am 12:11 AM

React combines JSX and HTML to improve user experience. 1) JSX embeds HTML to make development more intuitive. 2) The virtual DOM mechanism optimizes performance and reduces DOM operations. 3) Component-based management UI to improve maintainability. 4) State management and event processing enhance interactivity.

How do you connect React components to the Redux store using connect()? How do you connect React components to the Redux store using connect()? Mar 21, 2025 pm 06:23 PM

Article discusses connecting React components to Redux store using connect(), explaining mapStateToProps, mapDispatchToProps, and performance impacts.

How do you define routes using the <Route> component? How do you define routes using the <Route> component? Mar 21, 2025 am 11:47 AM

The article discusses defining routes in React Router using the &lt;Route&gt; component, covering props like path, component, render, children, exact, and nested routing.

What are the limitations of Vue 2's reactivity system with regard to array and object changes? What are the limitations of Vue 2's reactivity system with regard to array and object changes? Mar 25, 2025 pm 02:07 PM

Vue 2's reactivity system struggles with direct array index setting, length modification, and object property addition/deletion. Developers can use Vue's mutation methods and Vue.set() to ensure reactivity.

What are Redux reducers? How do they update the state? What are Redux reducers? How do they update the state? Mar 21, 2025 pm 06:21 PM

Redux reducers are pure functions that update the application's state based on actions, ensuring predictability and immutability.

What are Redux actions? How do you dispatch them? What are Redux actions? How do you dispatch them? Mar 21, 2025 pm 06:21 PM

The article discusses Redux actions, their structure, and dispatching methods, including asynchronous actions using Redux Thunk. It emphasizes best practices for managing action types to maintain scalable and maintainable applications.

What are the benefits of using TypeScript with React? What are the benefits of using TypeScript with React? Mar 27, 2025 pm 05:43 PM

TypeScript enhances React development by providing type safety, improving code quality, and offering better IDE support, thus reducing errors and improving maintainability.

React Components: Creating Reusable Elements in HTML React Components: Creating Reusable Elements in HTML Apr 08, 2025 pm 05:53 PM

React components can be defined by functions or classes, encapsulating UI logic and accepting input data through props. 1) Define components: Use functions or classes to return React elements. 2) Rendering component: React calls render method or executes function component. 3) Multiplexing components: pass data through props to build a complex UI. The lifecycle approach of components allows logic to be executed at different stages, improving development efficiency and code maintainability.

See all articles