Funksiyalar
Fayllar va extraction
Presigned/multipart upload, integrity tekshiruvi, preview, extraction va cleanup.
Upload protokoli
- Client filename, size, MIME va SHA-256 bilan upload intent yaratadi.
- API private object key va 300 soniyalik upload URL/proxy qaytaradi.
- Katta faylda multipart part URL’lari olinadi va ETaglar bilan finalize qilinadi.
- Client complete endpointni chaqiradi.
- Server HEAD/stream orqali size, digest, MIME va magic bytesni tekshiradi.
- Verified state va extraction job bir izchil DB operatsiyasida yaratiladi.
Format va chegaralar
| Parametr | Qiymat |
|---|---|
| Maksimal fayl | 50 MiB |
| Filename | 255 baytgacha |
| Upload URL TTL | 300 soniya |
| Integrity | Base64 SHA-256 + obyekt size |
| Rasmlar | PNG, JPEG, WebP |
| Hujjatlar | PDF, DOCX, plain text, Markdown, JSON, CSV |
| Kod | Keng tarqalgan source extensionlari |
| Arxiv | ZIP, bounded extraction |
Xavfsiz extraction
- PDF child process 30 soniyadan keyin kill qilinadi va
GOMEMLIMIT=256MiBbilan cheklanadi. - DOCX/ZIP entry soni, uncompressed size va path traversal bo‘yicha bounded.
- Declared MIME extension va magic-byte sniffing bilan solishtiriladi.
- Extraction natijasi chunklarga yoziladi; job retry olsa, fencing eski workerning write’ini rad etadi.
Preview, download va delete
Preview va download avval user ownershipni tekshiradi, keyin private obyektga vaqtinchalik kirish beradi. O‘chirish ikki bosqichli: DB yozuvi deleting bo‘ladi, worker S3 obyekt/chunklarni tozalaydi va deleted holatiga o‘tkazadi.
Delete state machine
ready | failed → deleting → deleted
└─ retryable cleanup jobSingle-part upload misoli
Intent → upload → complete
SHA256_BASE64=$(openssl dgst -sha256 -binary report.pdf | openssl base64 -A)
curl -X POST "$APP_URL/api/files/presign" \
-H "Content-Type: application/json" -H "X-CSRF-Token: $CSRF" \
-b cookies.txt \
-d "{\"filename\":\"report.pdf\",\"size\":1048576,\"mime_type\":\"application/pdf\",\"sha256\":\"$SHA256_BASE64\"}"
# Javobdagi upload URL bilan PUT qiling, so‘ng:
curl -X POST "$APP_URL/api/files/$FILE_ID/complete" \
-H "X-CSRF-Token: $CSRF" -b cookies.txt