Trong hầu hết các ứng dụng thực tế, người dùng không chỉ gửi dữ liệu dạng văn bản mà còn cần tải lên (upload) các tệp tin như ảnh đại diện, hồ sơ PDF hay video.
Xử lý file upload là một tác vụ quan trọng nhưng cũng đầy thách thức về mặt bảo mật và hiệu suất. Trong bài viết này, chúng ta sẽ cùng tìm hiểu cách sử dụng Multer – thư viện mạnh mẽ và phổ biến nhất để giải quyết vấn đề này trong Node.js.
1. Multer là gì? Tại sao phải dùng Multer?
Multer là một middleware cho Express và Node.js, chuyên dùng để xử lý dữ liệu dạng multipart/form-data. Đây là định dạng bắt buộc khi bạn muốn gửi file từ Client lên Server.
Nếu không có Multer, bạn sẽ phải tự bóc tách các luồng dữ liệu (stream) cực kỳ phức tạp từ request body. Multer giúp bạn làm việc đó chỉ với vài dòng code, đồng thời hỗ trợ kiểm tra định dạng file và giới hạn kích thước tệp tin.
2. Luồng xử lý File Upload với Multer Middleware
Khi một Request chứa file đi vào Server, Multer sẽ đóng vai trò là “người gác cổng” trung gian.
- Request: Client gửi dữ liệu kèm file.
- Middleware: Multer bắt lấy file, kiểm tra xem nó có hợp lệ (dung lượng, loại file) hay không.
- Storage: Nếu hợp lệ, Multer sẽ lưu file vào thư mục bạn chỉ định (ví dụ
/uploads).
- Process: Bạn nhận về thông tin file để lưu đường dẫn vào Database.
3. Lựa chọn nơi lưu trữ: Local Disk hay Cloud Storage?
Tùy vào quy mô của dự án, bạn cần có chiến lược lưu trữ file phù hợp.

- Lưu tại Server (Local Disk): Đơn giản, miễn phí nhưng làm nặng server và khó mở rộng nếu bạn có nhiều máy chủ.
- Lưu trên Cloud (S3, Cloudinary, Firebase): Chuyên nghiệp, an toàn, hỗ trợ CDN giúp tải ảnh cực nhanh, nhưng tốn chi phí.
4. Quy trình xử lý và tối ưu hóa hình ảnh
Đừng bao giờ lưu ảnh gốc mà người dùng tải lên! Chúng thường rất nặng và không đồng nhất. Bạn cần một “dây chuyền” xử lý ảnh tự động.

- Resize: Đưa ảnh về kích thước chuẩn (ví dụ 800×600).
- Optimize: Giảm dung lượng file nhưng vẫn giữ nguyên chất lượng hiển thị.
- Watermark: Đóng dấu bản quyền cho hình ảnh của bạn.
- Deliver: Cung cấp link ảnh đã được tối ưu cho người dùng.
Xử lý file là một kỹ năng Backend nâng cao. Nhưng ứng dụng của bạn sẽ còn “xịn” hơn nữa nếu nó có khả năng phản hồi tức thời (Real-time).
Bài tiếp theo chúng ta sẽ khám phá Websocket và Socket.io – Bí mật đằng sau các ứng dụng Chat và Thông báo trực tuyến.
👉 Node.js với Websocket: Xây dựng ứng dụng Chat Real-time
Đón xem bài tiếp theo: Websocket toàn tập: Cách xây dựng hệ thống Chat Real-time “vạn người mê” với Socket.io!**