Khi người dùng tải lên dữ liệu (file, hình ảnh, video, v.v.), backend thường xử lý dữ liệu này qua các bước sau:
Nhận dữ liệu
- Qua API: Backend nhận dữ liệu từ HTTP request (thường là
POST
hoặcPUT
).- Ví dụ: sử dụng
multipart/form-data
cho file.
- Ví dụ: sử dụng
Xác thực dữ liệu
- Kiểm tra định dạng: Đảm bảo file đúng loại (ví dụ: file ảnh chỉ nhận
.jpg
,.png
,.gif
,.jpeg
). - Kiểm tra kích thước: Giới hạn dung lượng tối đa của file tải lên.
Xử lý dữ liệu
- Chuyển đổi định dạng:
- Ví dụ: chuyển hình ảnh từ PNG sang JPEG để tiết kiệm dung lượng.
- Tối ưu hóa:
- Nén file, giảm chất lượng ảnh, hoặc tạo các phiên bản với kích thước khác nhau (thumbnail, large, full, medium,medium-large).
- Đặt lại tên file:
- Trước khi lưu vào server thì đổi lại tên file để tránh xung đột và dễ kiểm tra sau này.
Lưu trữ dữ liệu
- Trên server: Lưu file trực tiếp trên hệ thống file của backend.
- Trên dịch vụ lưu trữ đám mây: Tải file lên các dịch vụ như:
- MinIO: Lưu trữ nội bộ theo giao thức S3.
- Amazon S3: Lưu trữ trên đám mây.
- Google Cloud Storage: Dịch vụ lưu trữ đám mây của Google.
Trả phản hồi
- Trả lại phản hồi cho người dùng:
- Thành công: Cung cấp đường dẫn hoặc ID để truy cập file.
- Lỗi: Thông báo rõ nguyên nhân (file quá lớn, sai định dạng, v.v.).
___________________________________________________________________________________________
Xử lý vụ đặt tên file để tránh xung đột, dễ quản lý, và bảo mật.
1. Giữ nguyên tên file gốc
Mô tả: Tên file được giữ nguyên như khi người dùng tải lên.
Ưu điểm
- Dễ hiểu đối với người dùng vì họ quen thuộc với tên file gốc.
- Không cần xử lý thêm ở backend.
Nhược điểm
- Dễ xung đột: Nếu hai người dùng tải lên file cùng tên, file có thể bị ghi đè.
- Không bảo mật: Tên file có thể chứa thông tin nhạy cảm hoặc mã độc (ví dụ: password.txt).
- Độ dài tên file có thể gây lỗi với một số hệ thống tệp.
2. Thay thế tên file gốc bằng định dạng chuẩn hóa
Tên file gốc được chuẩn hóa để đảm bảo an toàn và tương thích, ví dụ:
- Loại bỏ ký tự đặc biệt: Tên
Ảnh 2024.jpg
→Anh-2024.jpg
. - Đổi thành chữ thường:
MyFile.PNG
→myfile.png
. - Thay khoảng trắng:
Hello
→
World.pngHello_World.png
.
Ưu điểm
- Tránh lỗi với ký tự không tương thích.
- Dễ đọc và dễ quản lý.
Nhược điểm
- Không giải quyết được vấn đề xung đột nếu có nhiều file cùng tên.
3. Đổi tên bằng UUID (Universal Unique Identifier)
Tên file được thay thế hoàn toàn bằng một mã UUID duy nhất, ví dụ:
23e4f61c-e25c-45f9-97b8-7a29d6b50e97.jpg
.
Ưu điểm
- Đảm bảo tên file là duy nhất, không sợ xung đột.
- Phù hợp cho hệ thống lưu trữ lớn hoặc phân tán.
- Không lộ thông tin tên file gốc.
Nhược điểm
- Khó đọc: Tên file trở nên không thân thiện với người dùng.
- Tăng chi phí xử lý nếu cần lưu thông tin tên file gốc để tham chiếu.
4. Đổi tên theo timestamp (dấu thời gian)
Tên file được ghép với dấu thời gian để đảm bảo tính duy nhất, ví dụ:
file_20241119123045.jpg
(ngày 19/11/2024, 12:30:45).
Ưu điểm
- Dễ tạo và đảm bảo tên file không bị trùng lặp trong một thời điểm.
- Có thể dùng dấu thời gian để sắp xếp hoặc phân loại file.
Nhược điểm
- Tên file dài và khó hiểu nếu không có phần mô tả.
- Nếu hai file được tải lên cùng lúc (trong mili-giây), có thể vẫn xung đột.
5. Đổi tên theo ID người dùng hoặc thông tin liên quan
Tên file được ghép với thông tin liên quan như:
- ID người dùng:
user_1234_profile.jpg
. - Tên dự án:
project_abc_design.png
. - Tên file + ID:
document_5678_2024.pdf
.
Ưu điểm
- Dễ tổ chức và quản lý file.
- Có thể truy vết nguồn gốc file dựa trên tên.
Nhược điểm
- Cần thêm bước để xử lý hoặc tra cứu thông tin người dùng, dự án, v.v.
- Nếu ID bị lộ, có thể dẫn đến rủi ro bảo mật.
6. Kết hợp tên gốc với UUID hoặc timestamp
Tên file gốc được kết hợp với một mã duy nhất hoặc dấu thời gian, ví dụ:
myphoto_23e4f61c.jpg
(kết hợp với UUID).photo_202411191230.jpg
(kết hợp với timestamp).
Ưu điểm
- Giữ lại một phần tên file gốc, giúp dễ nhận diện.
- Đảm bảo không trùng lặp.
Nhược điểm
- Tên file dài và phức tạp hơn.
- Vẫn có nguy cơ tiết lộ thông tin nếu tên file gốc chứa dữ liệu nhạy cảm.