API Docs
เอกสารสำหรับการใช้งาน Dropmp ผ่าน HTTP API
Base URLs
- API
- https://dropmp-api-gateway.xemprod.com
- Download
- https://dmp-dl.xemprod.com
- Frontend
- https://dmp.xemprod.com
ทุก endpoint คืนค่าเป็น JSON ยกเว้นการ stream ไฟล์ผ่าน /<id> บน download domain จะคืน binary stream
- • Single upload: ≤ 94 MB ต่อคำขอ
- • Chunked upload: ≤ 94 MB ต่อชิ้น, ขนานสูงสุด 10 chunks
- • Total file size: ดูค่า
maxFileSizeBytesจากGET /api/storage - • TTL: ตั้งเวลาล่วงหน้าได้อิสระ (เช่น 5m, 1h, 24h) โดยต้องไม่เกินเวลาสูงสุดใน
maxTtl
Upload (single)
- POST
/api/uploadอัพโหลดไฟล์เดียวจบในคำขอเดียว — รองรับขนาดสูงสุด 94 MB ไฟล์ใหญ่กว่านี้ใช้ endpoint chunked แทน
Request
Content-Type: multipart/form-data file: File (required, ≤ 94 MB) ttl: "3m" | "5m" | ... | "7d" (optional, ดูรายการที่รองรับได้จาก GET /api/storage) mode: "frontend" | "direct" (optional, default "frontend") password: string (optional — ถ้ามี mode บังคับเป็น "frontend") showExpiry: "true" | "false" (optional, default "true")Response
{ "id": "abc123", "name": "photo.png", "size": 102400, "mime": "image/png", "mode": "frontend", "hasPassword": false, "showExpiry": true, "createdAt": 1715300000000, "expiresAt": 1715386400000, "link": "https://dmp.xemprod.com/abc123", "frontendLink": "https://dmp.xemprod.com/abc123", "downloadLink": "https://dmp-dl.xemprod.com/abc123", "secretToken": "xxxxxxxxxxxx" // เก็บไว้ใช้ลบไฟล์ — แสดงครั้งเดียว }Example
curl -X POST https://dropmp-api-gateway.xemprod.com/api/upload \ -F "file=@./photo.png" \ -F "ttl=24h" \ -F "mode=frontend"- •413 Payload Too Large — เกิน 94 MB หรือเกินพื้นที่ที่เหลือบนเซิร์ฟเวอร์
- •secretToken แสดงครั้งเดียว — เก็บไว้ใช้กับ DELETE
Upload (chunked)
- POST
/api/upload/initเริ่ม session chunked upload — server ตรวจขนาดและพื้นที่ที่เหลือ แล้วคำนวณจำนวน chunk ให้
Request
Content-Type: application/json { "name": string (required, ≤ 512 chars), "size": number (required, total bytes), "mime": string (optional), "ttl": string (optional), "mode": "frontend" | "direct" (optional), "password": string (optional), "showExpiry": boolean (optional) }Response
{ "uploadId": "Xy9...", "chunkSize": 98566144, // ขนาดสูงสุดต่อ chunk (bytes) — ใช้ slice ไฟล์ "totalChunks": 11 // จำนวน chunk ที่ต้องส่ง (server คำนวณให้) }Example
curl -X POST https://dropmp-api-gateway.xemprod.com/api/upload/init \ -H "Content-Type: application/json" \ -d '{"name":"big.zip","size":1073741824,"ttl":"24h"}'- •Client ไม่ต้องส่ง totalChunks — server คำนวณจาก size ÷ chunkSize เพื่อบังคับให้แต่ละชิ้นเต็มขนาด
- •ใช้ chunkSize ที่ได้รับมา slice ไฟล์: chunk[i] = file[i*chunkSize .. (i+1)*chunkSize)
- •413 — ไฟล์ใหญ่เกินขนาดสูงสุดที่ระบบรองรับ (ดูได้จาก maxFileSizeBytes ใน GET /api/storage) หรือพื้นที่จัดเก็บเต็ม
- •session หมดอายุอัตโนมัติถ้าไม่มี activity ใน 30 นาที
- POST
/api/upload/chunkอัพโหลดชิ้นส่วนของไฟล์ — ส่งหลาย chunk พร้อมกันได้ (แนะนำไม่เกิน 10 พร้อมกัน เพื่อความเสถียร)
Request
Content-Type: multipart/form-data uploadId: string (required) chunkIndex: number (required, 0..totalChunks-1) chunk: File (required, ≤ 94 MB ต่อชิ้น)Response
{ "ok": true, "chunkIndex": 3 }Example
curl -X POST https://dropmp-api-gateway.xemprod.com/api/upload/chunk \ -F "uploadId=Xy9..." \ -F "chunkIndex=0" \ -F "chunk=@./big.zip.part0"- •อัพ chunk เดิมซ้ำได้ — server จะแทนของเดิม
- •ลำดับการส่งไม่สำคัญ — server เรียงให้ตอน complete
- POST
/api/upload/completeรวม chunk ทั้งหมดเป็นไฟล์เดียว ตรวจขนาด แล้วบันทึกไฟล์จริง
Request
Content-Type: application/json { "uploadId": "Xy9..." }Response
{ "id": "abc123", "name": "big.zip", "size": 1073741824, "mime": "application/zip", "mode": "frontend", "hasPassword": false, "showExpiry": true, "createdAt": 1715300000000, "expiresAt": 1715386400000, "link": "https://dmp.xemprod.com/abc123", "frontendLink": "https://dmp.xemprod.com/abc123", "downloadLink": "https://dmp-dl.xemprod.com/abc123", "secretToken": "xxxxxxxxxxxx" // เก็บไว้ใช้ลบไฟล์ — แสดงครั้งเดียว }Example
curl -X POST https://dropmp-api-gateway.xemprod.com/api/upload/complete \ -H "Content-Type: application/json" \ -d '{"uploadId":"Xy9..."}'- •ถ้า chunk ขาด → 400 พร้อมระบุจำนวนที่ได้รับ
- •ถ้าขนาดรวมไม่ตรงกับที่ประกาศใน init → 400 และล้าง chunk ทิ้ง
- POST
/api/upload/abortยกเลิก session — ลบ chunk ที่อัพไว้ทั้งหมดทันที
Request
Content-Type: application/json { "uploadId": "Xy9..." }Response
204 No ContentExample
curl -X POST https://dropmp-api-gateway.xemprod.com/api/upload/abort \ -H "Content-Type: application/json" \ -d '{"uploadId":"Xy9..."}'
Files
- GET
/api/files/:idขอ metadata ของไฟล์ — ใช้สร้างหน้ารายละเอียดก่อนกรอกรหัส/ดาวน์โหลด
Response
{ "id": "abc123", "name": "photo.png", "size": 102400, "mime": "image/png", "mode": "frontend", "hasPassword": false, "showExpiry": true, "createdAt": 1715300000000, "expiresAt": 1715386400000, "frontendLink": "https://dmp.xemprod.com/abc123", "downloadLink": "https://dmp-dl.xemprod.com/abc123" }Example
curl https://dropmp-api-gateway.xemprod.com/api/files/abc123 - POST
/api/files/:id/verifyยืนยันรหัสผ่าน → ออก download token + downloadUrl
Request
Content-Type: application/json { "password": "secret" }Response
{ "token": "...", "expiresAt": 1715300600000, "downloadUrl": "https://dmp-dl.xemprod.com/abc123?t=..." }Example
curl -X POST https://dropmp-api-gateway.xemprod.com/api/files/abc123/verify \ -H "Content-Type: application/json" \ -d '{"password":"secret"}'- •401 ถ้ารหัสผ่านไม่ถูก หรือไฟล์ไม่ต้องการรหัสแต่ส่งมา
- POST
/api/files/:id/download-tokenออก download token สำหรับไฟล์ที่ไม่มีรหัสผ่าน — anonymous เรียกได้
Response
{ "token": "...", "expiresAt": ..., "downloadUrl": "..." }Example
curl -X POST https://dropmp-api-gateway.xemprod.com/api/files/abc123/download-token - DELETE
/api/files/:idลบไฟล์ก่อนหมดอายุ — ต้องส่ง secretToken ที่ได้ตอนอัพโหลด
Request
Headers: X-Secret-Token: <secretToken จากตอน upload>Response
204 No ContentExample
curl -X DELETE https://dropmp-api-gateway.xemprod.com/api/files/abc123 \ -H "X-Secret-Token: xxxxxxxxxxxx" - GET
/:idลิงก์สั้น — พฤติกรรมขึ้นกับ Host: download domain จะ stream ไฟล์, domain อื่นจะตอบ metadata
Example
# บน download domain → stream ไฟล์ curl -L https://dmp-dl.xemprod.com/abc123 -o photo.png # บน api domain → ได้ metadata เหมือน /api/files/:id curl https://dropmp-api-gateway.xemprod.com/abc123
System
- GET
/api/storageดูสถานะพื้นที่จัดเก็บ + ขนาดสูงสุดต่อไฟล์ และรายการ TTL ที่รองรับ
Response
{ "usedBytes": 12345678, "totalBytes": 10737418240, "remainingBytes": 10725072562, "maxFileSizeBytes": 5368709120, "allowedTtls": ["3m","1h","24h","3d","7d"], "defaultTtl": "24h" }Example
curl https://dropmp-api-gateway.xemprod.com/api/storage
Provided by Xemprod