Giao diện
Câu hỏi thường gặp (FAQ) — File Storage S3 Pro
Câu hỏi chung
Plugin này khác gì so với plugin File Storage S3 cơ bản?
Phiên bản Pro bổ sung các tính năng:
| Tính năng | S3 cơ bản | S3 Pro |
|---|---|---|
| Upload file qua server | ✅ | ✅ |
| Presigned URL — upload trực tiếp từ trình duyệt | ❌ | ✅ |
| Signed URL — truy cập file riêng tư có thời hạn | ❌ | ✅ |
| Hỗ trợ file riêng tư (non-public) | Hạn chế | ✅ Đầy đủ |
| Thumbnail rule cho preview ảnh | ❌ | ✅ |
| Nhiều chế độ Path Style | ❌ | ✅ (Virtual, Path, Ignore) |
Plugin có hỗ trợ MinIO không?
Có. MinIO tương thích S3 protocol nên hoạt động tốt. Bạn cần:
- Đặt
endpointtrỏ đến MinIO server (VD:http://localhost:9000) - Chọn
forcePathStyle= Path - Sử dụng access key / secret key của MinIO
Hỗ trợ những dịch vụ S3-compatible nào?
Bất kỳ dịch vụ nào tương thích S3 API đều hoạt động, bao gồm:
- Amazon S3 — dịch vụ gốc
- MinIO — self-hosted, mã nguồn mở
- Cloudflare R2 — không tính phí egress
- Alibaba Cloud OSS
- Tencent Cloud COS
- Backblaze B2
- DigitalOcean Spaces
Presigned URL là gì? Tại sao nên dùng?
Presigned URL là URL tạm thời (có thời hạn) cho phép trình duyệt upload file trực tiếp lên S3 mà không cần đi qua server. Lợi ích:
- Giảm tải server — server chỉ tạo URL, không xử lý file data
- Tăng tốc upload — upload thẳng lên S3 nên nhanh hơn
- Tiết kiệm bandwidth — file không đi qua server trung gian
- An toàn — URL có thời hạn, hết hạn sẽ không dùng được
Xử lý lỗi thường gặp
Lỗi "Access Denied" khi upload
Nguyên nhân phổ biến:
- Thiếu quyền IAM: Đảm bảo tài khoản có
s3:PutObjecttrên bucket - CORS chưa cấu hình: Trình duyệt bị chặn cross-origin request
- Bucket policy chặn: Kiểm tra bucket policy có cho phép PUT từ tài khoản IAM
- Public ACL bị chặn: Nếu bật
public, cần tắt "Block Public Access" trên bucket
Cách xử lý:
bash
# Kiểm tra quyền với AWS CLI
aws s3api put-object --bucket YOUR_BUCKET --key test.txt --body test.txt
# Kiểm tra CORS
aws s3api get-bucket-cors --bucket YOUR_BUCKETLỗi "mimetype not match"
Plugin kiểm tra MIME type khi tạo presigned URL. Nếu storage có cấu hình rules.mimetype, file phải khớp với pattern được phép.
Cách xử lý: Kiểm tra cấu hình storage, thêm MIME type cần thiết vào danh sách cho phép (VD: image/*, application/pdf).
Signed URL hết hạn, không tải được file
Mặc định signed URL có hiệu lực 3600 giây (1 giờ). Nếu cần thời gian dài hơn:
- Tăng giá trị
signedUrlExpirestrong cấu hình storage - Hoặc gọi lại API
getFileSignedlUrlsđể lấy URL mới
Upload lỗi trên MinIO nhưng OK trên AWS S3
Kiểm tra:
- forcePathStyle phải là
Pathcho MinIO - endpoint phải đúng, bao gồm cả port (VD:
http://localhost:9000) - MinIO bucket phải tồn tại và được cấp quyền
File riêng tư không hiển thị URL trong database
Đây là hành vi đúng. Với file riêng tư (non-public), plugin chủ động xoá URL trước khi lưu vào database để tránh lộ đường dẫn. URL sẽ được tạo động qua signed URL mỗi khi cần truy cập.
Câu hỏi nâng cao
Có thể tùy chỉnh thời hạn presigned URL không?
Có. Thay đổi presignedPostExpires trong cấu hình storage options. Giá trị mặc định là 3600 giây. Lưu ý: AWS S3 giới hạn tối đa 7 ngày (604800 giây) cho presigned URL.
Làm sao tích hợp CDN (CloudFront)?
- Tạo CloudFront distribution trỏ đến S3 bucket
- Cấu hình
baseUrltrong storage settings là URL của CloudFront (VD:https://d1234.cloudfront.net) - Với file public, URL trả về sẽ đi qua CDN
- Với file riêng tư, signed URL vẫn đi trực tiếp qua S3
Thumbnail rule hoạt động như thế nào?
Trường thumbnailRule chứa query string để tạo thumbnail khi preview. Ví dụ với Alibaba Cloud OSS:
x-oss-process=image/resize,w_200,h_200Khi gọi getFileSignedlUrls với preview = true, query string này sẽ được gắn vào URL.