กลับ

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 Content

    Example

    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 Content

    Example

    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