Rate this post

Trong Express.js, việc tải File lên hơi khó khăn vì tính chất không đồng bộ và cách tiếp cận mạng của nó.

Nó có thể được thực hiện bằng cách sử dụng phần mềm trung gian để xử lý dữ liệu đa phần / biểu mẫu. Có nhiều phần mềm trung gian có thể được sử dụng như multer, connect, body-parser, v.v.

Hãy lấy một ví dụ để chứng minh tải lên tệp trong Node.js. Ở đây, chúng tôi đang sử dụng phần mềm trung gian ‘multer’.

Các bài viết liên quan:

Tổng quan về việc tải lên tệp trong Express.js

Việc tải lên tệp (file upload) là một chức năng quan trọng trong phát triển ứng dụng web, và Express.js cung cấp các công cụ để xử lý việc này một cách dễ dàng. Khi người dùng tải lên tệp từ máy khách lên máy chủ, Express.js cho phép bạn nhận và xử lý các tệp này trong yêu cầu của người dùng.

Dưới đây là một tổng quan về việc tải lên tệp trong Express.js:

  1. Cấu hình phía máy chủ: Đầu tiên, bạn cần cấu hình máy chủ Express.js để xử lý yêu cầu tải lên tệp. Điều này bao gồm việc cài đặt các middleware cần thiết và cấu hình xử lý yêu cầu tải lên.
  2. Cấu hình phía máy khách: Tiếp theo, bạn cần tạo một giao diện người dùng cho người dùng để tải lên tệp. Điều này có thể là một biểu mẫu HTML đơn giản cho người dùng nhập thông tin tệp và nhấp vào nút tải lên.
  3. Xử lý tệp đã tải lên: Khi người dùng gửi yêu cầu tải lên tệp, Express.js sẽ nhận các tệp được tải lên và cung cấp cho bạn cách truy cập và xử lý chúng. Bạn có thể lưu trữ tệp trên máy chủ, xử lý và kiểm tra dữ liệu trong tệp, hoặc thực hiện các tác vụ tùy chỉnh khác liên quan đến tệp đã tải lên.
  4. Xử lý lỗi và xác thực: Trong quá trình tải lên tệp, bạn có thể gặp phải các lỗi như kích thước tệp quá lớn, định dạng không hợp lệ hoặc lỗi xác thực. Express.js cho phép bạn xử lý các lỗi này và cung cấp phản hồi thích hợp cho người dùng.

Việc tải lên tệp trong Express.js có thể được thực hiện thông qua các thư viện hỗ trợ như Multer hoặc Formidable, giúp đơn giản hóa quá trình xử lý tệp và hỗ trợ các tính năng như giới hạn kích thước tệp, kiểm tra định dạng và lưu trữ tệp trên máy chủ.

Với việc sử dụng các công cụ và thư viện phù hợp, bạn có thể xử lý việc tải lên tệp một cách dễ dàng và linh hoạt trong ứng dụng Express.js của mình.

Xem thêm const trong c++

Cấu hình phía máy chủ

Để cấu hình máy chủ Express.js để xử lý yêu cầu tải lên tệp, bạn cần thực hiện các bước sau:

  1. Cài đặt các thư viện cần thiết: Đầu tiên, bạn cần cài đặt các thư viện hỗ trợ xử lý tải lên tệp trong Express.js. Hai thư viện phổ biến là Multer và Formidable. Bạn có thể cài đặt chúng thông qua npm hoặc yarn bằng các lệnh sau:
npm install multer

hoặc

yarn add multer 

Hoặc nếu bạn muốn sử dụng thư viện Formidable:

npm install formidable 

hoặc

yarn add formidable
  1. Import các module cần thiết: Sau khi cài đặt, bạn cần import các module Multer hoặc Formidable vào ứng dụng Express.js của mình.

Ví dụ:Nếu bạn sử dụng Multer:

const express = require('express'); 
const multer = require('multer'); 
const app = express(); 

Hoặc nếu bạn sử dụng Formidable

const express = require('express'); 
const formidable = require('formidable'); 
const app = express();
  1. Cấu hình xử lý yêu cầu tải lên: Tiếp theo, bạn cần cấu hình xử lý yêu cầu tải lên trong Express.js. Điều này bao gồm thiết lập middleware tải lên và xử lý các yêu cầu tương ứng.Nếu bạn sử dụng Multer, ví dụ dưới đây mô tả cách cấu hình Multer middleware để xử lý yêu cầu tải lên tệp:
const multer = require('multer');

// Cấu hình Multer
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    // Đường dẫn lưu trữ tệp
    cb(null, 'uploads/');
  },
  filename: function (req, file, cb) {
    // Đặt tên tệp
    cb(null, file.originalname);
  }
});

// Tạo middleware Multer
const upload = multer({ storage: storage });

// Sử dụng middleware Multer trong tuyến đường
app.post('/upload', upload.single('file'), (req, res) => {
  // Xử lý tệp đã tải lên
  // ...
});

Trong ví dụ trên, chúng ta cấu hình Multer để lưu trữ tệp được tải lên trong thư mục “uploads/” và giữ nguyên tên tệp gốc. Sau đó, chúng ta tạo một middleware Multer và sử dụng nó trong route “/upload” để xử lý yêu cầu tải lên. Tham số “file” trong “upload.single(‘file’)” đại diện cho tên trường tệp trong biểu mẫu HTML.Nếu bạn sử dụng Formidable, ví dụ dưới đây mô tả cách xử lý yêu cầu tải lên tệp bằng cách sử dụng Formidable:

const formidable = require('formidable');

// Xử lý yêu cầu tải lên tệp
app.post('/upload', (req, res) => {
  const form = formidable({ multiples: true });

  form.parse(req, (err, fields, files) => {
    if (err) {
      // Xử lý lỗi
      // ...
    } else {
      // Xử lý tệp đã tải lên
      // ...
    }
  });
});

Trong ví dụ trên, chúng ta tạo một đối tượng Formidable và sử dụng phương thức “parse” để phân tích yêu cầu tải lên. Sau đó, chúng ta xử lý tệp đã tải lên trong callback của “parse”.

Lưu ý rằng đây chỉ là một số ví dụ cơ bản về cách cấu hình phía máy chủ để xử lý yêu cầu tải lên trong Express.js. Bạn có thể tùy chỉnh và mở rộng cấu hình này theo nhu cầu cụ thể của ứng dụng của bạn.

Xem thêm Cách lên lịch cho bài viết wordpress

Cấu hình phía máy khách

Để cấu hình phía máy khách để tải lên tệp trong Express.js, bạn cần thực hiện các bước sau:

  1. Tạo một biểu mẫu HTML: Đầu tiên, bạn cần tạo một biểu mẫu HTML cho người dùng nhập thông tin tệp và tải lên. Biểu mẫu này sẽ chứa một trường tệp và một nút tải lên.

Ví dụ:

<form action="/upload" method="POST" enctype="multipart/form-data">
  <input type="file" name="file">
  <button type="submit">Tải lên</button>
</form>

Trong ví dụ trên, chúng ta sử dụng phương thức POST và thuộc tính “enctype” với giá trị “multipart/form-data” để hỗ trợ tải lên tệp.

Xử lý sự kiện tải lên: Khi người dùng nhấp vào nút tải lên, bạn cần xử lý sự kiện tải lên để gửi yêu cầu tới máy chủ. Điều này có thể được thực hiện bằng JavaScript hoặc thư viện AJAX như Axios hoặc Fetch. Ví dụ:

const fileInput = document.querySelector('input[type="file"]');
const uploadButton = document.querySelector('button[type="submit"]');

uploadButton.addEventListener('click', (event) => {
  event.preventDefault();

  const file = fileInput.files[0];
  const formData = new FormData();
  formData.append('file', file);

  fetch('/upload', {
    method: 'POST',
    body: formData
  })
    .then(response => {
      // Xử lý phản hồi từ máy chủ
      // ...
    })
    .catch(error => {
      // Xử lý lỗi
      // ...
    });
});

Trong ví dụ trên, chúng ta lắng nghe sự kiện nhấp vào nút tải lên và ngăn chặn hành vi mặc định của biểu mẫu. Sau đó, chúng ta lấy tệp được chọn bởi người dùng và tạo một đối tượng FormData để chứa tệp đó. Cuối cùng, chúng ta gửi yêu cầu POST đến địa chỉ “/upload” sử dụng fetch và gửi dữ liệu là formData.

Lưu ý rằng việc cấu hình phía máy khách để tải lên tệp trong Express.js có thể được tùy chỉnh phù hợp với cấu trúc và yêu cầu của ứng dụng của bạn. Bạn có thể sử dụng các thư viện khác như Axios, jQuery.ajax, hoặc các thư viện tương tự để xử lý yêu cầu tải lên tệp từ phía máy khách.

Xem thêm Express.js Cookies Management

Xử lý tệp đã tải lên

Khi bạn đã nhận được tệp đã tải lên từ máy khách vào máy chủ Express.js, bạn có thể xử lý tệp đó theo nhu cầu của ứng dụng của bạn. Dưới đây là một số cách xử lý tệp đã tải lên trong Express.js:

  1. Lưu trữ tệp trên máy chủ: Bạn có thể lưu trữ tệp đã tải lên trên máy chủ để sử dụng sau này. Để làm điều này, bạn có thể sử dụng các thư viện như fs (hệ thống tệp tin) của Node.js để lưu trữ tệp trong thư mục hoặc vị trí tùy ý trên máy chủ. Ví dụ:
const fs = require('fs');

app.post('/upload', upload.single('file'), (req, res) => {
  const file = req.file;

  // Kiểm tra nếu có tệp
  if (!file) {
    res.status(400).send('Không có tệp được tải lên');
    return;
  }

  // Lưu trữ tệp trên máy chủ
  fs.writeFileSync(`uploads/${file.filename}`, file.buffer);

  res.send('Tệp đã tải lên thành công');
});

Trong ví dụ trên, chúng ta sử dụng phương thức writeFileSync của thư viện fs để lưu trữ tệp đã tải lên trong thư mục “uploads”.

  1. Xử lý và trích xuất thông tin từ tệp: Bạn có thể xử lý và trích xuất thông tin từ tệp đã tải lên. Ví dụ, nếu tệp là hình ảnh, bạn có thể sử dụng thư viện như Sharp để thay đổi kích thước hoặc xử lý hình ảnh. Nếu tệp là tệp CSV, bạn có thể sử dụng các thư viện như csv-parser để đọc và xử lý dữ liệu từ tệp CSV. Ví dụ:
const sharp = require('sharp');
const csv = require('csv-parser');

app.post('/upload', upload.single('file'), (req, res) => {
  const file = req.file;

  // Kiểm tra nếu có tệp
  if (!file) {
    res.status(400).send('Không có tệp được tải lên');
    return;
  }

  // Xử lý tệp hình ảnh
  if (file.mimetype.startsWith('image/')) {
    sharp(file.buffer)
      .resize(300, 200)
      .toFile(`uploads/${file.filename}-thumbnail.jpg`, (err, info) => {
        if (err) {
          console.error(err);
          res.status(500).send('Lỗi xử lý tệp hình ảnh');
          return;
        }

        res.send('Tệp hình ảnh đã tải lên và xử lý thành công');
      });
  }

  // Xử lý tệp CSV
  if (file.mimetype === 'text/csv') {
    const results = [];
    fs.createReadStream(file.path)
      .pipe(csv())
      .on('data', (data) => {
        results.push(data);
      })
      .on('end', () => {
        res.send('Dữ liệu từ tệp CSV đã được trích xuất thành công');
      });
  }
});

Trong ví dụ trên, chúng ta sử dụng thư viện sharp để thay đổi kích thước hình ảnh đã tải lên và lưu trữ phiên bản thumbnail. Ngoài ra, chúng ta sử dụng thư viện csv-parser để đọc dữ liệu từ tệp CSV và lưu trữ nó trong một mảng kết quả.

Lưu ý rằng việc xử lý tệp đã tải lên trong Express.js phụ thuộc vào yêu cầu cụ thể của ứng dụng của bạn. Bạn có thể tùy chỉnh xử lý tệp dựa trên loại tệp, kích thước, định dạng hoặc yêu cầu khác.

Xem thêm Java JPopupMenu

Xử lý lỗi và xác thực

Khi xử lý tệp đã tải lên trong Express.js, cũng cần xử lý lỗi và thực hiện xác thực để đảm bảo an toàn và đáng tin cậy. Dưới đây là một số lưu ý quan trọng khi xử lý lỗi và xác thực trong việc tải lên tệp trong Express.js:

  1. Xác thực dữ liệu tệp: Trước khi xử lý tệp đã tải lên, hãy đảm bảo rằng bạn xác thực dữ liệu tệp để đảm bảo tính hợp lệ và an toàn. Bạn có thể kiểm tra các yêu cầu định dạng tệp, kích thước tối đa, loại tệp được phép và các ràng buộc khác. Sử dụng các thư viện và công cụ phù hợp để xác thực dữ liệu tệp như express-validator, Joi, hoặc các thư viện xác thực tùy chỉnh.
  2. Xử lý lỗi: Khi xảy ra lỗi trong quá trình xử lý tệp đã tải lên, hãy xử lý nó một cách chính xác để đảm bảo không xảy ra lỗi không mong muốn hoặc tiết lộ thông tin nhạy cảm. Bạn có thể sử dụng các trình xử lý lỗi middleware như error-handler để xử lý và ghi nhận lỗi. Đồng thời, hãy trả về phản hồi hợp lý cho người dùng với thông báo lỗi thích hợp và mã trạng thái HTTP phù hợp.
  3. Kiểm tra kích thước tệp: Hạn chế kích thước tệp tải lên để đảm bảo hiệu suất và tránh các cuộc tấn công tải lên quá tải. Bạn có thể đặt giới hạn kích thước tệp tải lên trong cấu hình máy chủ Express.js bằng cách sử dụng các tùy chọn như limits hoặc sử dụng các middleware như express-fileupload để kiểm tra và giới hạn kích thước tệp.
  4. Kiểm tra loại tệp: Đảm bảo rằng bạn chỉ chấp nhận các loại tệp cần thiết và không chấp nhận các loại tệp không mong muốn hoặc nguy hiểm. Bạn có thể kiểm tra loại tệp bằng cách so sánh giá trị mimetype của tệp đã tải lên với danh sách loại tệp hợp lệ mà bạn cho phép.
  5. Xác thực người dùng: Nếu tải lên tệp liên quan đến xác thực người dùng, hãy đảm bảo rằng bạn xác thực và xác nhận quyền truy cập của người dùng trước khi cho phép tải lên. Bạn có thể sử dụng các giải pháp xác thực và phân quyền như JWT (JSON Web Tokens) hoặc passport.js để xác thực và kiểm soát quyền truy cập.
  6. Lưu trữ an toàn: Khi lưu trữ tệp đã tải lên, hãy đảm bảo rằng bạn lưu trữ chúng trong một vị trí an toàn trên máy chủ. Đừng cho phép truy cập trực tiếp vào thư mục tệp đã tải lên và đảm bảo rằng các biện pháp bảo mật được triển khai để bảo vệ tệp khỏi việc truy cập trái phép.
  7. Quét tệp đầu vào: Đối với một số loại tệp đặc biệt như hình ảnh hoặc tệp PDF, có thể tồn tại nguy cơ bảo mật như mã độc được nhúng trong tệp. Hãy sử dụng công cụ quét và phân tích tệp để đảm bảo tính toàn vẹn và an toàn của tệp đã tải lên trước khi xử lý nó.

Nhớ rằng việc xử lý lỗi và xác thực trong việc tải lên tệp trong Express.js là một phần quan trọng để bảo vệ ứng dụng của bạn và đảm bảo tính toàn vẹn và an toàn của dữ liệu tệp. Hãy cân nhắc các yêu cầu và yêu cầu bảo mật của ứng dụng của bạn và triển khai các biện pháp bảo mật phù hợp để đảm bảo tính bảo mật.

Xem thêm Express.js Middleware

Ví dụ file upload trong express

Tạo một thư mục “jtp file upload” có các tệp sau:

uploads: Nó là một thư mục trống, tức là được tạo ra để lưu trữ các hình ảnh đã tải lên.

package: Đây là tệp JSON, có dữ liệu sau:

File: index.html

File: server.js

Để cài đặt package.json, hãy thực thi đoạn mã sau :

npm install

Nó sẽ tạo một thư mục mới “node_modules” bên trong thư mục “jtp file upload”.

npm install

  • Các phần phụ thuộc được cài đặt. Bây giờ, hãy chạy máy chủ:
  • Chọn một hình ảnh để tải lên và nhấp vào nút “Upload”.

Tại đây, bạn thấy rằng tệp đã được tải lên thành công. Bạn có thể xem tệp đã tải lên trong thư mục “uploads”.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now