Bỏ qua, đến nội dung

Cài đặt và sử dụng — File Manager

Tổng quan

Plugin plugin-file-manager quản lý toàn bộ vòng đời file trong hệ thống: upload, lưu trữ, tạo URL truy cập và xóa file. Hỗ trợ nhiều backend lưu trữ: Local disk, AWS S3, Alibaba OSS, Tencent COS, MinIO.

Yêu cầu

Thành phầnYêu cầu
Server DigiforcePhiên bản >= 1.0
Storage backendLocal (mặc định), hoặc cloud storage đã cấu hình

Bước 1: Kích hoạt plugin

  1. Truy cập Settings → Plugin Manager
  2. Tìm plugin-file-manager
  3. Bật công tắc Enable

Khi cài đặt lần đầu, plugin tự động tạo storage mặc định loại local (lưu trên disk server).

Bước 2: Cấu hình Storage Backend

Vào Settings → File Storage để quản lý các backend lưu trữ.

Các loại storage được hỗ trợ

LoạiMô tảPhù hợp cho
localLưu trên disk server (thư mục uploads)Development, single-server
s3AWS S3 hoặc S3-compatibleProduction, multi-region
ali-ossAlibaba Cloud Object StorageKhu vực Trung Quốc
tx-cosTencent Cloud COSKhu vực Trung Quốc
minioMinIO (self-hosted, S3-compatible)Self-hosted production

Cấu hình chung cho mọi storage

Tham sốMô tả
NameTên định danh (dùng để tham chiếu trong collection)
TitleTên hiển thị
Base URLURL gốc để truy cập file
PathThư mục con lưu file
DefaultĐánh dấu là storage mặc định
ParanoidNếu bật, không xóa file trên storage khi xóa record

Cấu hình S3

Tham sốMô tảVí dụ
RegionAWS regionap-southeast-1
BucketTên bucketmy-app-uploads
Access Key IDAWS access key
Secret Access KeyAWS secret key
EndpointCustom endpoint (cho MinIO)https://minio.example.com
Thumbnail RuleHậu tố URL cho ảnh preview?x-oss-process=image/resize,w_200

Cấu hình Alibaba OSS

Tham sốMô tả
RegionOSS region
BucketTên bucket
Access Key IDAlibaba access key
Access Key SecretAlibaba secret key
Thumbnail RuleRule xử lý ảnh

Cấu hình Tencent COS

Tham sốMô tả
RegionCOS region
BucketTên bucket
Secret IDTencent secret ID
Secret KeyTencent secret key

Biến môi trường

Nên lưu credentials (access key, secret key) trong Environment Variables ($env) thay vì ghi trực tiếp. Cấu hình storage hỗ trợ template: {{$env.S3_ACCESS_KEY}}.

Bước 3: Sử dụng Upload

Qua giao diện (Form Field)

  1. Trong collection, tạo field loại Attachment
  2. Khi user điền form, trường attachment hiển thị nút upload
  3. File được upload qua API attachments:upload
  4. Metadata lưu vào bảng attachments, file lưu vào storage backend

Qua API

typescript
// Upload file
const formData = new FormData();
formData.append('file', fileBlob);
await agent.resource('attachments').upload({
  values: formData,
});

Quy tắc Upload (Rules)

Quy tắcMô tảMặc định
Max file sizeKích thước tối đa cho mỗi fileTheo cấu hình storage
MIME type filterChỉ cho phép các loại file cụ thểTất cả (*)

Plugin sử dụng mime-match để kiểm tra MIME type:

  • image/* — chỉ cho phép ảnh
  • application/pdf — chỉ PDF
  • image/*,application/pdf — ảnh và PDF

Quản lý File

URL Resolution

Khi truy vấn attachment, plugin tự động tạo URL hoàn chỉnh:

URL = baseUrl + path + filename

Với ảnh, nếu storage có thumbnailRule, URL preview sẽ thêm rule đó vào cuối.

Xóa File

Khi record attachment bị xóa:

  1. Plugin tìm storage tương ứng (qua storageId)
  2. Gọi storage.delete() để xóa file khỏi backend
  3. Nếu storage có paranoid: true, file không bị xóa (chỉ xóa record)

WARNING

Không thể xóa storage mặc định. Không thể xóa storage đang được sử dụng bởi collection.

File Rename Mode

Plugin hỗ trợ đổi tên file khi upload để tránh trùng (theo cấu hình renameMode của storage).

Phân quyền (ACL)

ActionQuyền
attachments:uploadloggedIn (mọi user đã đăng nhập)
attachments:createloggedIn
attachments:updateChỉ người tạo (createdById = currentUser.id)
attachments:destroyChỉ người tạo
storages:*Admin (snippet pm.file-manager.storages)
storages:getBasicInfologgedIn
storages:checkloggedIn

Cache và Đồng bộ

  • Storage được cache trong memory (storagesCache)
  • Cache tự động reload khi storage thêm/sửa/xóa
  • Trong môi trường multi-instance, sync message reloadStorages được gửi đến tất cả instance

Lưu ý

  • Với production, khuyến nghị dùng S3/OSS thay vì local (tránh mất file khi deploy lại)
  • Nếu dùng reverse proxy (Nginx), cần cấu hình client_max_body_size phù hợp
  • File URL/preview không thể sửa sau khi upload (bảo vệ bởi beforeUpdate hook)
  • Template file trong collection cho phép tạo collection lưu trữ file tùy chỉnh (ngoài attachments)