/ / Cách tải xuống tệp bằng Node.js

Cách tải xuống tệp bằng Node.js

fstab on

Tải tệp xuống bộ nhớ cục bộ thay vì giữ chúng trong bộ nhớ đám mây có một số lợi thế. Chúng bao gồm truy cập dễ dàng hơn, truy cập mà không cần kết nối internet và hoàn toàn sở hữu dữ liệu của bạn.


Bạn có thể tải xuống một và nhiều tệp bằng cách sử dụng các mô-đun Node.js tích hợp. Thay vào đó, bạn cũng có thể sử dụng thư viện của bên thứ ba để đạt được kết quả tương tự.


Tải xuống tệp không có thư viện của bên thứ ba

Để tải xuống tệp bằng Node.js mà không cần sự trợ giúp của gói bên thứ ba, bạn sẽ cần ba mô-đun Node.js cốt lõi: fs, httpsđường dẫn.

Các fs mô-đun hỗ trợ nhiều tác vụ tệp bao gồm đọc, tạo, cập nhật, xóa và đổi tên. Các https mô-đun tạo một máy chủ web để xử lý các yêu cầu và gửi phản hồi. Các đường dẫn mô-đun cung cấp một cách để tương tác với các đường dẫn thư mục và tệp.

Sử dụng các mô-đun này, bạn có thể gửi yêu cầu HTTP GET để truy cập tài nguyên tệp từ máy chủ web, sau đó tạo bản sao của tài nguyên trong hệ thống cục bộ của mình.

Để bắt đầu, hãy nhập các mô-đun cần thiết:

 const https = require('https');
const fs = require('fs');
const path = require('path');

Bạn sẽ cần sử dụng tên tệp từ URL làm tên mặc định tốt để lưu tệp. Bạn có thể sử dụng mô-đun đường dẫn .tên cơ sở() phương pháp để lấy tên tệp từ URL của nó. Phương thức này nhận một đối số đường dẫn và trả về phần cuối cùng của đường dẫn.

Ví dụ:

 const filename = path.basename(url);

Sau đó, yêu cầu tệp từ máy chủ bằng cách gọi https.get() phương pháp. Phương thức này lấy URL làm đối số đầu tiên và hàm gọi lại cho phản hồi làm đối số thứ hai

Vượt qua url biến làm đối số đầu tiên và sau đó là hàm gọi lại để xử lý khi phương thức này nhận được luồng phản hồi:

 https.get(url, (res) => {
})

Trong chức năng gọi lại, bạn có thể sử dụng fs.createWriteStream() phương thức để tạo một luồng có thể ghi mới, chuyển tên tập tin biến như một đối số.

Ví dụ:

 const fileStream = fs.createWriteStream(filename);
res.pipe(fileStream);

Các tạoWriteStream() giúp giảm bớt quá trình ghi dữ liệu vào một tệp, đặc biệt là khi bạn đang xử lý khối dữ liệu lớn.

Các đường ống() sau đó gửi luồng dữ liệu phản hồi GET tới tập hồ sơ mục tiêu.

Để ghi một thông báo vào bảng điều khiển sau khi tập lệnh đã tải xong tệp xuống, hãy đính kèm một .trên() trình phát sự kiện tới tập hồ sơ Biến đổi:

 fileStream.on('finish', () => {
  fileStream.close();
  console.log('Download finished');
});

Đối tượng fileStream phát ra một hoàn thành sự kiện khi nó đã ghi tất cả dữ liệu vào tệp. Nắm bắt điều này thông qua .trên() phương thức và cung cấp chức năng gọi lại để đóng tập hồ sơ và ghi một tin nhắn vào bảng điều khiển.

Để thực thi tốt hơn và khả năng sử dụng lại tập lệnh hiệu quả, hãy bọc mã này trong một hàm lấy URL làm đối số của nó:

 function downloadFile(url) {
    const filename = path.basename(url);

    https.get(url, (res) => {
        const fileStream = fs.createWriteStream(filename);
        res.pipe(fileStream);

        fileStream.on('finish', () => {
            fileStream.close();
            console.log('Download finished')
        });
    })
}

Để chạy chức năng, hãy gọi nó và chuyển URL của tệp bạn muốn tải xuống:

 downloadFile([file url]);

Để chạy tập lệnh, hãy mở thiết bị đầu cuối của bạn và nhập nút theo sau là tên của tệp JavaScript:

 node [script name]

Tập lệnh này sẽ tải xuống URL tệp mà bạn đã chuyển đến Tải tập tin() chức năng và lưu nó trong thư mục làm việc của bạn.

Xử Lý Lỗi Khi Tải File

Trong Node.js, các lỗi cụ thể như ghi vào luồng, kết nối dịch vụ kém hoặc sự cố với chính tệp có thể xảy ra khi tải tệp xuống. Điều quan trọng là phải ghi lại các thông báo lỗi khi các lỗi này xảy ra để có thể giải quyết vấn đề.

Thử/Bắt khối

Khối try-catch là một cấu trúc lập trình cho phép bạn xử lý các lỗi và ngoại lệ tiềm ẩn trong mã của mình.

Khối try-and-catch tạo nên khối try…catch. Mã của khối thử chạy trước và mã của khối bắt sẽ chạy nếu khối thử đưa ra một ngoại lệ.

 try {
    downloadFile([file url]);
} catch (error) {
    console.log(error);
}

Sử dụng khối thử/bắt để đảm bảo rằng bạn có thể phát hiện bất kỳ lỗi nào liên quan đến tải xuống. Sau đó, bạn có thể xử lý bất kỳ lỗi nào nếu cần, chẳng hạn như ghi lỗi vào bảng điều khiển hoặc thử tải xuống lại.

Mã trạng thái phản hồi HTTP

Mã trạng thái cho các phản hồi HTTP cho biết một yêu cầu HTTP cụ thể đã được thực hiện thành công hay chưa.

Ví dụ:

 https.get(url, (res) => {
    const code = res.statusCode();
    console.log(code)
    const fileStream = fs.createWriteStream(filename);
});

Nếu yêu cầu trả về mã trạng thái nằm ngoài phạm vi thành công, 200-299, Có một vấn đề với các yêu cầu. Kiểm tra mã trạng thái HTTP, sau đó tra cứu ý nghĩa của mã trạng thái để xử lý lỗi khi cần thiết.

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

Bạn có thể tải xuống nhiều tệp cùng lúc bằng cách chuyển các URL của tệp làm đối số khi chạy nút [script name]. Để thực hiện tác vụ này, bạn phải sửa đổi một số phần trong tập lệnh của mình.

Trong JavaScript, các đối số được truyền cùng với nút lệnh có sẵn trong process.argv, một thuộc tính của đối tượng Node.js toàn cục. Thuộc tính này trả về một mảng các đối số dòng lệnh. Phần tử đầu tiên trong mảng này phải là nút, lệnh thực tế mà bạn chạy. Đối số thứ hai sẽ là tên tệp tập lệnh, sau đó mỗi đối số sau đây phải là một URL.

Để tải xuống nhiều tệp cùng một lúc, hãy lưu mảng từ process.argv trong một biến. Sau đó chạy phương thức slice() để xóa hai phần tử đầu tiên không phải là URL:

 const args = process.argv;
const urls = args.slice(2);

Các lát cắt() phương thức tạo một mảng mới từ các phần tử được chọn trong một mảng. Phương pháp này chọn từ một điểm bắt đầu được chỉ định đến một điểm kết thúc (không bao gồm) được chỉ định.

Trong trường hợp này, việc chuyển một giá trị 2 sẽ loại bỏ nút tên lệnh và tên tệp tập lệnh của bạn.

Cuối cùng, sử dụng phương thức bản đồ của JavaScript, chuyển từng phần tử vào url mảng để Tải tập tin():

 urls.map(url =>{
    downloadFile(url)
});

Để chạy mã, hãy nhập nút lệnh cùng với tên tệp JavaScript của bạn và các URL bạn muốn tải xuống:

 node [script name] url1 url2 url3 

Sử dụng thư viện của bên thứ ba

Bạn cũng có thể tải xuống các tệp bằng thư viện của bên thứ ba như npm Tải xuống bưu kiện.

Trong thư mục tập lệnh của bạn, hãy chạy lệnh npm sau để cài đặt Tải xuống bưu kiện:

 npm install download

Yêu cầu gói đã tải xuống trong tập lệnh của bạn, sau đó lưu các đối số dòng lệnh trong một mảng:

 const download = require('download');
const args = process.argv;
const urls = args.slice(2);

Bây giờ bạn có thể sử dụng Tải xuống thư viện để tải tập tin. Bạn có thể làm điều này theo nhiều cách tùy thuộc vào mục tiêu cụ thể của bạn.

Ví dụ:

 async function downloadFile(urls){
await Promise.all(urls.map((url) => download(url, "files")))
};

downloadFile(urls);

khai báo Tải tập tin hoạt động như không đồng bộvà tạo một Lời hứa để đợi cho đến khi nhiệm vụ cụ thể hoàn thành với chờ đợi từ khóa. Lập bản đồ url mảng để Tải xuống chức năng và chuyển tên của thư mục cục bộ—các tập tintrong trường hợp này—để lưu trữ các tệp trong.

Tải tệp xuống hệ thống tệp cục bộ

Các chức năng tích hợp sẵn của nút, như fs và https, giúp bạn dễ dàng viết trình tải xuống tệp. Để dễ dàng hơn nữa, bạn có thể sử dụng mô-đun của bên thứ ba như tải xuống.

Cả hai phương pháp đều cho phép bạn tải xuống tệp từ máy chủ từ xa và lưu chúng vào hệ thống tệp cục bộ. Bạn nên chọn phương pháp tốt nhất cho nhu cầu của mình và sử dụng nó trong ứng dụng Node.js tiếp theo của mình.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *