WP-MEDIA-STRIP-01 — Gỡ EXIF + nén media tường / dòng thời gian
Domain: D-MEDIA · D-SOCIAL
Surfaces: API + CON
Status: IMP (2026-08-19)
Vấn đề
POST /upload/single lưu buffer gốc lên MinIO. Ảnh/video điện thoại thường mang GPS, model máy, thời gian, serial trong EXIF / container metadata. Feed social công khai sẽ lộ vị trí người dùng dù họ không ghim «Gần địa điểm».
Fix
| Lớp | Hành vi |
|---|---|
| Ảnh JPEG/PNG/WebP | sharp: auto-orient, xoá metadata, JPEG q82, cạnh ≤1920 |
| Video MP4/MOV | ffmpeg: -map_metadata -1, H.264 CRF 26 ≤1080p, AAC 96k, +faststart; fallback remux copy nếu transcode fail |
| GIF / PDF / audio | Giữ nguyên (không pipeline camera EXIF) |
| Presign / multipart complete | Tải object ≤32MB, xử lý lại, ghi đè cùng key |
| CON CreatePost | Picker ảnh và video, quality 0.72; BE vẫn là nguồn chân lý |
Binary
- Local Windows:
ffmpeg-static(npm) hoặcFFMPEG_PATH - Docker Alpine:
apk add ffmpeg(/usr/bin/ffmpegưu tiên hơn ffmpeg-static vì musl)
Verify
cd api && npx jest src/modules/media/sanitize-upload.spec.ts src/modules/media/media.service.spec.ts
# Upload JPEG có GPS → object trên MinIO không còn chuỗi Exif/GPS