JavaScript tải xuống nhiều tệp

Giả sử bạn có một trang web chứa một loạt các liên kết HTML tham chiếu đến các tệp video MP4. Bước đầu tiên chúng ta cần cài đặt mô-đun cheerio để có thể trích xuất các URL từ các liên kết này

npm install cheerio --save

Sau đó, chúng tôi xác định chức năng tải xuống trang web từ xa

'use strict';

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

const getPage = pageURL => {
    return new Promise((resolve, reject) => {
        https.get(pageURL, res => {
            let data = [];
            res.on('data', chunk => {
                data.push(chunk);
            });
            res.on('end', () => {
                resolve(Buffer.concat(data).toString());
            });    
        });
    });
};

Quá trình tải xuống trang xảy ra bằng cách nhận bộ đệm dữ liệu sẽ được chuyển đổi thành một chuỗi duy nhất khi kết thúc quá trình truyền dữ liệu. Tại thời điểm này, chúng ta phải xác định quy trình trích xuất các liên kết từ trang

const getFileURLS = async url => {
    const urls = [];
    try {
        const html = await getPage(url);
        const $ = cheerio.load(html);
        $('a[download]').each(function() {
            let href = $(this).attr('href');
            urls.push(href);
        });
        return urls;
    } catch(err) {
        return urls;
    }
};

Mảng urls sẽ chứa tất cả các URL của video MP4 và được điền bằng cách lặp với cheerio trên tất cả các phần tử a có thuộc tính download và thêm giá trị của thuộc tính

'use strict';

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

const getPage = pageURL => {
    return new Promise((resolve, reject) => {
        https.get(pageURL, res => {
            let data = [];
            res.on('data', chunk => {
                data.push(chunk);
            });
            res.on('end', () => {
                resolve(Buffer.concat(data).toString());
            });    
        });
    });
};
0 của chúng vào mảng

Bây giờ chúng ta cần xác định chức năng sẽ tải xuống một video

const download = (url, destPath) => {
    return new Promise((resolve, reject) => {
        http.get(url, res => {
            const filePath = fs.createWriteStream(destPath);
            res.pipe(filePath);
            resolve(true); 
        });    
    });
};

Dữ liệu video chứa dưới dạng bộ đệm byte sẽ được chuyển hướng đến luồng được tạo bằng phương thức

'use strict';

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

const getPage = pageURL => {
    return new Promise((resolve, reject) => {
        https.get(pageURL, res => {
            let data = [];
            res.on('data', chunk => {
                data.push(chunk);
            });
            res.on('end', () => {
                resolve(Buffer.concat(data).toString());
            });    
        });
    });
};
1 thông qua phương thức
'use strict';

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

const getPage = pageURL => {
    return new Promise((resolve, reject) => {
        https.get(pageURL, res => {
            let data = [];
            res.on('data', chunk => {
                data.push(chunk);
            });
            res.on('end', () => {
                resolve(Buffer.concat(data).toString());
            });    
        });
    });
};
2 của đối tượng phản hồi được trả về bởi yêu cầu HTTP. Bằng cách này, hiệu suất được tối ưu hóa so với các phương thức ghi mặc định của mô-đun
'use strict';

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

const getPage = pageURL => {
    return new Promise((resolve, reject) => {
        https.get(pageURL, res => {
            let data = [];
            res.on('data', chunk => {
                data.push(chunk);
            });
            res.on('end', () => {
                resolve(Buffer.concat(data).toString());
            });    
        });
    });
};
3 cốt lõi

Bây giờ chúng ta chỉ cần tạo một mảng Lời hứa chứa tất cả các yêu cầu HTTP cho video

________số 8_______

Cuối cùng, chúng tôi có thể sử dụng phương pháp

'use strict';

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

const getPage = pageURL => {
    return new Promise((resolve, reject) => {
        https.get(pageURL, res => {
            let data = [];
            res.on('data', chunk => {
                data.push(chunk);
            });
            res.on('end', () => {
                resolve(Buffer.concat(data).toString());
            });    
        });
    });
};
4 (chúng tôi cũng có thể sử dụng
'use strict';

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

const getPage = pageURL => {
    return new Promise((resolve, reject) => {
        https.get(pageURL, res => {
            let data = [];
            res.on('data', chunk => {
                data.push(chunk);
            });
            res.on('end', () => {
                resolve(Buffer.concat(data).toString());
            });    
        });
    });
};
5 nếu chúng tôi chấp nhận rằng một số lần tải xuống có thể không thành công) để thực hiện tất cả các lần tải xuống

(async () => {
    const baseURL = 'https://see.stanford.edu/course/cs107';
    try {
        const urls = await getFileURLS(baseURL);
        const requests = createDownloadRequests(urls);
        await Promise.all(requests);

    } catch(err) {
        console.log(err);
    }
})();

Tóm lại, sự kết hợp giữa Lời hứa và phát trực tuyến mang lại lợi ích hiệu suất đáng kể cho hoạt động liên kết với IO, chẳng hạn như tải xuống tệp

Làm cách nào để tải xuống nhiều tệp bằng JavaScript?

var downloadButton = new Ext. Nút({ văn bản. "Tải xuống", trình xử lý. function(){ //tải xuống ba tệp tại đây } }); javascript. html.

Làm cách nào để nén nhiều tệp và tải xuống bằng JavaScript?

Tải xuống nhiều tệp và lưu trữ trong bộ nhớ . Sau đó, chúng tôi có thể ghi nó vào tệp hoặc kết hợp các dữ liệu đốm màu đó thành tệp zip. const tải xuống = url => { tìm nạp lại (url). sau đó (resp => resp. using fetch to download files and store data as Blob in memory. We can then write it to file or combine those blob data into a zip file. const download = url => { return fetch(url). then(resp => resp.

Có thể tải xuống nhiều tệp cùng một lúc không?

Tải xuống nhiều tệp cùng lúc có hại cho ổ cứng không? . Không, nó sẽ không làm hỏng ổ cứng của bạn, nhưng nó có thể ảnh hưởng đến hiệu suất ghi của bạn .

Làm cách nào để tải xuống tệp bằng JavaScript?

Vậy các bước tải file sẽ là. .
Sử dụng API tìm nạp để tải xuống tệp tập lệnh
Chuyển đổi dữ liệu thành loại blob
Chuyển đổi đối tượng blob thành chuỗi bằng cách sử dụng URL. tạoObjectURL()