Đây là bài viết Phần 2 nằm trong series: Laravel File Upload
Trong bài viết [Phần 1], mình đã chia sẻ cách tạo form và xử lý file upload cơ bản trong Laravel. Tuy nhiên, trong thực tế, chúng ta không thể để người dùng upload bất kỳ file gì một cách tự do. Việc kiểm tra (validation) và bảo vệ upload là bắt buộc, nhằm đảm bảo tính ổn định và an toàn cho ứng dụng.
Trong bài viết [Phần 2] của loạt bài viết File Upload trong Laravel lần này sẽ bao gồm các nội dung sau:
Mục Lục
I. Kiểm tra file upload với Laravel Validation
Bổ sung thêm phần validation vào phần trên cùng trong function store
của UploadController nhằm kiểm tra tính xác thực của các file được upload.
$request->validate([
'file' => 'required|image|mimes:jpg,jpeg|dimensions:max_width=600,min_height=100,max:2048',
]);
Code language: PHP (php)
required
: bắt buộc chọn fileimage
: chỉ chấp nhận file ảnhdimension
: kiểm tra kích thước filemimes
: giới hạn định dạng (VD: chỉ cho phép jpg, jpeg)max
: giới hạn kích thước (tính theo KB,2048
= 2MB)
II. Hiển thị lỗi khi validate không thành công
Trong blade template upload.blade.php
, bổ sung thêm phần hiển thị lỗi validation
@if ($errors->has("file"))
<div
class="container mx-auto mt-10 p-6 bg-red-100 border border-red-400 text-red-700 rounded-lg shadow-md max-w-md">
{{ $errors->first("file") }}</div>
@endif
Code language: Bash (bash)
Laravel sẽ tự động redirect về trang cũ nếu validation không thành công, kèm theo hiển thị lỗi.

III. Bảo vệ ứng dụng khỏi rủi ro khi upload
Một số nguy cơ thường gặp khi cho phép người dùng upload file
- Người dùng upload file thực thi (PHP, exe, js…) nhằm mục đích xấu
- File quá lớn gây hao tốn tài nguyên
- Upload ảnh chứa mã độc
Do đó bắt buộc phải luôn áp dụng Validation mỗi khi sử dụng file upload form, và thiết lập rõ các điều kiện cần thiết:
- Chỉ cho phép định dạng cần thiết (
mimes
,image
) - Giới hạn kích thước file (
max
) - Không lưu file vào thư mục
public/
trực tiếp - Với file nhạy cảm (CV, hóa đơn…), nên dùng disk riêng (chỉnh sửa file
filesystems.php
để tạo thêm disk) và chỉ cho người dùng đã xác thực truy cập.
IV. Lời kết
Trong [Phần 2] này, mình đã chia sẻ:
- Cách dùng validation để kiểm tra file upload
- Hiển thị lỗi cho người dùng
- Một số kỹ thuật bảo mật để giảm rủi ro
🔗 Mã nguồn
Mã nguồn mình sử dụng trong [Phần 2] này có thể tham khảo ở đây: https://github.com/10h30/laravel-file-upload-series/tree/part-2-validation-security
🔜 Phần 3: Upload nhiều file
Hiện tại form upload chỉ cho phép chọn một file một lần. Nhưng trong thực tế, người dùng thường muốn upload nhiều file cùng lúc, ví dụ như upload nhiều hình ảnh, tài liệu, hay video.
Trong Phần 3, chúng ta sẽ nâng cấp hệ thống để hỗ trợ upload nhiều file một lúc, đồng thời xử lý chúng một cách an toàn và hiệu quả.
Hẹn gặp bạn ở phần 3, sẽ được ra lò vào tối thứ 6 – 09/05/2025.
Bạn đang xem loạt bài viết: Laravel File Upload
- Phần 1: File Upload trong Laravel – [Phần 1] Tạo form, xử lý file, lưu trữ file
- Phần 2: File Upload trong Laravel – [Phần 2] Kiểm tra và bảo vệ file upload form
- Phần 3: File Upload trong Laravel – [Phần 3] Upload cùng lúc nhiều file
Nếu bạn cần hỗ trợ kỹ thuật miễn phí, vui lòng gửi câu hỏi trực tiếp ở phần Thảo luận bên dưới, mình sẽ trả lời trong thời gian sớm nhất.
Bạn cần hỗ trợ kỹ thuật chuyên sâu?
Khám phá các gói dịch vụ giúp bạn tối ưu công việc và vận hành hệ thống hiệu quả hơn. Từ chăm sóc website đến hỗ trợ kỹ thuật, mọi thứ đều linh hoạt và phù hợp với nhu cầu của bạn.