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ặc PUT).
    • Ví dụ: sử dụng multipart/form-data cho file.

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.jpgAnh-2024.jpg.
  • Đổi thành chữ thường: MyFile.PNGmyfile.png.
  • Thay khoảng trắng: Hello
    World.png
    Hello_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.

About the Author

Ngọc Tri

View all author's posts

Leave a Comment

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

Bài viết khác

MinIO

MinIO là gì? MinIO là một giải pháp lưu trữ đối tượng (object storage) mã nguồn mở, tương thích với API của Amazon S3. Nó được thiết kế để lưu trữ và quản lý dữ liệu phi cấu trúc như hình ảnh, video, tài liệu, và các tệp tin lớn khác. Dung lượng của 1 object […]

Relational Database Design Principle

1-1 1-n n-n   https://nexwebsites.com/database/database-design/  

Laravel

Laravel là gì? Laravel là một framework PHP mã nguồn mở miễn phí được phát hành lần đầu tiên vào năm 2011. Taylor Otwell đã tạo ra Laravel nhằm giúp các Developer xây dựng các ứng dụng web bằng cách sử dụng mẫu kiến ​​trúc Model-View-Controller (MVC). Mô hình Model-View-Controller (MVC) trong Laravel: 1. Model […]

PHP

PHP là gì? PHP là từ viết tắt của thuật ngữ Personal Home Page và hiện nay đang có tên Hypertext Preprocessor. Đây là một dạng mã lệnh hoặc một chuỗi ngôn ngữ kịch bản. Trong đó, ngôn ngữ PHP chủ yếu được phát triển để dành cho những ứng dụng nằm trên máy chủ. Mỗi […]

Build for global scale: AFK scale cube and basic rule to build an application for global scale

REF https://akfpartners.com/growth-blog/scale-cube

PostgreSQL : subquery, CTE

What is subquery in PostgreSQL? In PostgreSQL, a subquery is a query that is nested inside another query. The subquery is executed first, and its results are used as input to the outer query. Subqueries can be used in various contexts, such as in the SELECT, WHERE, and HAVING clauses of a query. For example, […]