Hướng dẫn

Cách thêm tải tệp lên vào ứng dụng: lưu trữ, giới hạn và bảo mật

Để thêm tải tệp lên vào ứng dụng, hãy lưu tệp trong object storage (một bucket), không lưu trên ổ đĩa máy chủ hoặc trong cơ sở dữ liệu, và lưu một bản ghi nhỏ trong cơ sở dữ liệu gồm khóa tệp, tên, kích thước, loại và chủ sở hữu. Kiểm tra kích thước và loại tệp trên máy chủ, quyết định ngay từ đầu tệp là công khai (như ảnh sản phẩm) hay riêng tư (như hóa đơn), và chỉ phục vụ tệp riêng tư sau khi đã kiểm tra ai đang yêu cầu. Trong một công cụ tạo ứng dụng bằng AI, bạn có thể mô tả tính năng tải lên trong một prompt; phần quan trọng là kiểm tra rằng tệp vẫn còn sau khi triển khai lại và không ai sai người có thể mở được chúng.

Xác định loại tải lên bạn cần

Trước khi xây dựng, hãy trả lời ba câu hỏi:

  1. Tệp gì? Ảnh đại diện, ảnh sản phẩm, PDF, bảng tính, âm thanh, video. Điều này quyết định giới hạn loại và kích thước.
  2. Ai được xem? Mọi người (thư viện ảnh công khai) hay chỉ người tải lên và quản trị viên (hợp đồng, tài liệu định danh, tệp khách hàng).
  3. Sau khi tải lên thì sao? Chỉ lưu, hiển thị bản xem trước, thay đổi kích thước ảnh, hay đọc nội dung.

Ảnh công khai và tài liệu riêng tư cần các thiết lập khác nhau, nên hãy quyết định điều này trước.

Tệp nên lưu ở đâu

Lựa chọnCách hoạt độngPhù hợp vớiLưu ý
Object storage (bucket)Tệp được lưu trong dịch vụ được xây cho mục đích này; cơ sở dữ liệu lưu khóa hoặc URLGần như mọi ứng dụngQuy tắc truy cập phải được đặt đúng
Lưu trữ do nền tảng cung cấpCông cụ tạo ứng dụng hoặc nhà cung cấp hosting bật bucket cho bạnỨng dụng xây trên nền tảng đóGiới hạn và giá theo nền tảng
Ổ đĩa máy chủTệp ghi vào hệ thống tệp của máy chủ ứng dụngChỉ phát triển cục bộThường bị xóa khi khởi động lại hoặc triển khai lại
Trong cơ sở dữ liệuByte của tệp được lưu trong một bảngHầu như không bao giờLàm phình cơ sở dữ liệu, làm sao lưu chậm
Widget tải lên bên thứ baDịch vụ tải lên được lưu trữ xử lý toàn bộ quy trìnhMedia nặng, biến đổi ảnhThêm một nhà cung cấp, tài khoản và hóa đơn

Với hầu hết ứng dụng, object storage kết hợp với bản ghi trong cơ sở dữ liệu là lựa chọn đúng. Bản ghi trong cơ sở dữ liệu là thứ ứng dụng của bạn truy vấn ("hiển thị tài liệu của người dùng này"); bucket chỉ giữ các byte.

Tệp công khai và tệp riêng tư

  • Tệp công khai (ảnh sản phẩm, ảnh blog, ảnh đại diện) có thể được phục vụ từ một URL công khai. Ai có liên kết cũng có thể mở chúng, điều này ổn với loại nội dung này.
  • Tệp riêng tư (hóa đơn, hợp đồng, tài liệu y tế hoặc định danh, sản phẩm giao cho khách hàng) không bao giờ được có URL công khai dễ đoán. Máy chủ kiểm tra người dùng đã đăng nhập có sở hữu tệp hoặc có quyền hay không, sau đó hoặc truyền tệp trả về hoặc trả về URL có chữ ký: một liên kết chỉ hoạt động trong thời gian ngắn.

Một lỗi phổ biến và nghiêm trọng là tệp riêng tư được lưu trong bucket công khai với tên có thể đoán trước. Ai đoán được /uploads/invoice-102.pdf sẽ xem được hóa đơn của người khác.

Các prompt mẫu

Tải lên ảnh công khai:

Cho phép quản trị viên tải lên tối đa 5 ảnh sản phẩm cho mỗi sản phẩm. Chấp nhận JPG, PNG và WebP, mỗi tệp tối đa 5 MB. Lưu tệp trong file storage, lưu khóa, kích thước và thứ tự của mỗi tệp vào bảng product_images, và hiển thị ảnh thu nhỏ kèm nút xóa. Kiểm tra loại và kích thước trên máy chủ, không chỉ trên trình duyệt.

Tải lên tài liệu riêng tư:

Thêm trang Tài liệu cho khách hàng đã đăng nhập. Khách hàng có thể tải lên PDF tối đa 20 MB. Tệp là riêng tư: lưu trong file storage, lưu ID chủ sở hữu, tên tệp gốc, kích thước và thời điểm tải lên trong bảng documents, và chỉ cho chủ sở hữu và quản trị viên tải xuống. Việc tải xuống đi qua một route phía máy chủ có kiểm tra quyền. Không bao giờ để lộ URL công khai cho các tệp này.

Các yêu cầu tiếp theo hữu ích:

Hiển thị thanh tiến trình khi đang tải lên, và thông báo lỗi rõ ràng nếu tệp quá lớn hoặc sai loại.

Khi một bản ghi tài liệu bị xóa, cũng xóa tệp đã lưu.

Từng bước

  1. Chọn loại và giới hạn kích thước cho từng trường tải lên. Hãy cụ thể: "PDF tối đa 20 MB", không phải "tài liệu".
  2. Bật lưu trữ. Trong công cụ tạo ứng dụng bằng AI, hãy yêu cầu tải lên và nó sẽ thiết lập lưu trữ; ở nơi khác, tạo một bucket và thêm thông tin xác thực của nó như bí mật phía máy chủ.
  3. Tạo bảng cơ sở dữ liệu cho bản ghi tệp: ID, chủ sở hữu, khóa lưu trữ, tên gốc, loại, kích thước, thời điểm tạo.
  4. Xây dựng route tải lên trên máy chủ: kiểm tra người dùng đã đăng nhập, kiểm tra loại và kích thước, tạo khóa lưu trữ an toàn (không lấy từ tên tệp của người dùng), lưu tệp, chèn bản ghi.
  5. Xây dựng đường dẫn tải xuống hoặc hiển thị: URL công khai cho tệp công khai; route có kiểm tra quyền hoặc URL có chữ ký cho tệp riêng tư.
  6. Xây dựng giao diện: bộ chọn tệp, kéo thả nếu hữu ích, tiến trình, bản xem trước, lỗi.
  7. Xử lý việc xóa để xóa bản ghi cũng xóa tệp đã lưu.
  8. Kiểm tra: tải lên, tải lại, triển khai hoặc xuất bản lại, và xác nhận tệp vẫn tải được. Sau đó đăng nhập bằng người dùng khác và thử mở tệp riêng tư của người dùng đầu tiên.

Những lỗi thường gặp

  • Ghi tệp tải lên vào ổ đĩa máy chủ. Cách này chạy được khi phát triển, rồi tệp biến mất sau khi khởi động lại hoặc triển khai lại.
  • Tin vào kiểm tra của trình duyệt. Thuộc tính "accept" của ô chọn tệp chỉ là gợi ý, không phải bảo mật. Hãy kiểm tra loại và kích thước trên máy chủ.
  • Dùng tên tệp của người dùng làm khóa lưu trữ. Tên có thể trùng nhau và chứa ký tự lạ. Hãy tạo khóa duy nhất và lưu tên gốc riêng.
  • Bucket công khai cho tệp riêng tư. Như đã nêu ở trên; đây là lỗi thường xuất hiện trên báo chí.
  • Cho phép mọi loại tệp. Tệp HTML hoặc SVG được phục vụ từ tên miền của bạn có thể chạy script trong một số cấu hình. Chỉ chấp nhận những loại bạn cần.
  • Không có giới hạn kích thước. Một tệp khổng lồ có thể ăn hết dung lượng lưu trữ hoặc làm yêu cầu bị hết thời gian.
  • Tệp mồ côi. Xóa bản ghi cơ sở dữ liệu nhưng không xóa tệp sẽ làm đầy dần dung lượng lưu trữ mà bạn đang trả tiền.
  • Quên thiết bị di động. Ảnh chụp bằng điện thoại có thể lớn và ở định dạng như HEIC; hãy quyết định nên chấp nhận hay chuyển đổi.

Danh sách kiểm tra

  • Tệp được lưu vào object storage, không lưu trên ổ đĩa máy chủ hoặc trong cơ sở dữ liệu
  • Mỗi tệp có một bản ghi cơ sở dữ liệu gồm chủ sở hữu, khóa, tên, loại và kích thước
  • Loại và kích thước được kiểm tra trên máy chủ
  • Khóa lưu trữ được tạo ra, không lấy từ tên tệp
  • Tệp riêng tư chỉ được phục vụ sau khi kiểm tra quyền
  • Người dùng khác không thể mở tệp riêng tư của bạn, kể cả khi có liên kết
  • Xóa bản ghi cũng xóa tệp
  • Tệp vẫn tải được sau khi xuất bản hoặc triển khai lại
  • Lỗi tải lên được hiển thị rõ ràng, kể cả trên điện thoại

Tải tệp lên trong Mythex

Mythex có thể bật lưu trữ tệp cho một dự án tự động khi ứng dụng của bạn cần tải lên, nên bạn không phải cấp phát bucket bằng tay. Bạn cũng có thể gõ /storage trong chat. Tính năng này có trên gói Free và Pro, với giới hạn 1 GB trên gói Free, và bạn có thể xem trạng thái ở Cài đặt → Lưu trữ.

Tài liệu nêu rõ rằng hosting đã xuất bản không phải là hệ thống tệp cục bộ bền vững, nên hãy yêu cầu agent dùng lưu trữ của nền tảng thay vì ghi xuống đĩa. Tệp đã lưu và lượt tải xuống được trừ từ số dư credit của bạn, theo dung lượng và số lượng tải xuống; gói Pro trả bằng nửa mức giá của gói Free. Xem Lưu trữ tệp trong tài liệu.

Tải tệp lên thường đi cùng một cơ sở dữ liệu cho các bản ghi tệp và đăng nhập cho tệp riêng tư. Nếu bạn đang xây dựng một nơi để khách hàng trao đổi tài liệu, xem cách xây dựng cổng thông tin khách hàng, và chạy qua danh sách kiểm tra bảo mật trước khi ra mắt.

Câu hỏi thường gặp

Tệp tải lên nên được lưu ở đâu?

Trong object storage (dịch vụ lưu trữ đối tượng, thường gọi là bucket), không phải trên ổ đĩa của máy chủ ứng dụng và cũng không nằm trong cơ sở dữ liệu. Trong cơ sở dữ liệu, bạn chỉ lưu khóa hoặc URL của tệp, cùng các thông tin như tên, kích thước và chủ sở hữu.

Vì sao tệp đã tải lên của tôi biến mất sau khi xuất bản hoặc triển khai lại?

Hầu hết nền tảng lưu trữ không giữ một ổ đĩa cục bộ bền vững: khi ứng dụng khởi động lại hoặc được triển khai lại, các tệp được ghi vào ổ đĩa của nó sẽ mất. Hãy lưu các tệp tải lên vào object storage thay thế.

Làm sao để giữ tệp tải lên ở chế độ riêng tư?

Đừng để các tệp có thể được đọc công khai. Máy chủ phải kiểm tra người dùng đã đăng nhập có được phép xem tệp hay không, rồi gửi tệp hoặc trả về một liên kết có chữ ký với thời hạn ngắn.

Mythex có hỗ trợ tải tệp lên không?

Có. Mythex có thể bật lưu trữ tệp cho một dự án khi ứng dụng cần tải lên, trên gói Free và Pro, với giới hạn 1 GB đối với gói Free. Bạn yêu cầu tính năng tải lên với agent hoặc gõ /storage.

Mythex · Pricing · Xây dựng mọi thứ với AI · Mẫu website và ứng dụng · So sánh Mythex · Thuật ngữ xây dựng ứng dụng bằng AI · Công cụ miễn phí để xây dựng ứng dụng bằng AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو 简体中文 繁體中文(香港) 繁體中文(台灣)