stux.pro Media Server API Documentation

Overview

นี่คือ API สำหรับการจัดการไฟล์มีเดีย (รูปภาพ วิดีโอ และเอกสาร PDF) ที่ช่วยให้คุณสามารถอัปโหลดได้หลายไฟล์, เรียกดูไฟล์มีเดีย และลบไฟล์มีเดียได้ **ระบบจะจัดเก็บไฟล์ต้นฉบับเท่านั้น

1. อัปโหลดไฟล์มีเดีย (POST Request)

ใช้ Endpoint นี้เพื่ออัปโหลดรูปภาพ วิดีโอ หรือเอกสาร PDF หนึ่งไฟล์หรือหลายไฟล์พร้อมกัน ไฟล์มีเดียจะถูกจัดเก็บเป็นไฟล์ต้นฉบับเท่านั้น โดยไม่มีการปรับขนาดอัตโนมัติ ข้อมูลไฟล์มีเดียจะถูกบันทึกลงในฐานข้อมูล และจะมีการสร้าง UUID สำหรับไฟล์แต่ละไฟล์

Endpoint URL:

https://stux.pro/stux_media_api.php

Method:

POST

Headers:

Content-Type: multipart/form-data

Form Data (Body):

ไฟล์ที่รองรับ:

ขนาดไฟล์สูงสุด:

50 MB

ตัวอย่าง Request (JavaScript Fetch API):


const formData = new FormData();
const fileInput = document.getElementById('media'); // สมมติว่ามี <input type="file" id="media" multiple>

for (let i = 0; i < fileInput.files.length; i++) {
    formData.append('image[]', fileInput.files[i]); // ใช้ 'image[]' ใน form data
}

fetch('https://stux.pro/stux_media_api.php', {
    method: 'POST',
    body: formData
})
.then(response => response.json())
.then(data => {
    console.log('Upload Success:', data);
    // data.results จะเป็น array ของผลลัพธ์การอัปโหลดแต่ละไฟล์
    // แต่ละผลลัพธ์จะมี URLs ที่ถูก Rewrite แล้ว รวมถึง UUID ด้วย
})
.catch(error => {
    console.error('Upload Error:', error);
});
            

ตัวอย่าง Response (Success - JSON):


{
  "status": "multiple_upload_results",
  "results": [
    {
      "status": "success",
      "message": "Image uploaded and metadata saved successfully. Resizing is not applicable.",
      "id": "1",
      "uuid": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
      "original_user_filename": "photo1.jpg",
      "unique_base_name": "media_66796c0d8f1e3_abcd",
      "file_type": "image/jpeg",
      "create_time": "2025-06-25 14:30:00",
      "urls": {
        "original_by_filename": "https://stux.pro/media/media_66796c0d8f1e3_abcd_original.jpg/original",
        "original_by_uuid": "https://stux.pro/media/a1b2c3d4-e5f6-7890-1234-567890abcdef/original"
      }
    },
    {
      "status": "success",
      "message": "Video uploaded and metadata saved successfully. Resizing is not applicable for videos.",
      "id": "2",
      "uuid": "b2c3d4e5-f6a7-8901-2345-67890abcdef0",
      "original_user_filename": "video1.mp4",
      "unique_base_name": "media_66796c0d8f1e3_efgh",
      "file_type": "video/mp4",
      "create_time": "2025-06-25 14:30:05",
      "urls": {
        "original_by_filename": "https://stux.pro/media/media_66796c0d8f1e3_efgh_original.mp4/original",
        "original_by_uuid": "https://stux.pro/media/b2c3d4e5-f6a7-8901-2345-67890abcdef0/original"
      }
    },
    {
      "status": "success",
      "message": "Document (PDF) uploaded and metadata saved successfully. Resizing is not applicable for documents.",
      "id": "3",
      "uuid": "c3d4e5f6-a7b8-9012-3456-7890abcdef01",
      "original_user_filename": "document.pdf",
      "unique_base_name": "media_66796c0d8f1e3_ijkl",
      "file_type": "application/pdf",
      "create_time": "2025-06-25 14:30:10",
      "urls": {
        "original_by_filename": "https://stux.pro/media/media_66796c0d8f1e3_ijkl_original.pdf/original",
        "original_by_uuid": "https://stux.pro/media/c3d4e5f6-a7b8-9012-3456-7890abcdef01/original"
      }
    }
  ]
}
            

ตัวอย่าง Response (Error - JSON):


{
  "status": "multiple_upload_results",
  "results": [
    {
      "status": "success",
      "message": "Image uploaded...",
      "id": "1",
      "...": "..."
    },
    {
      "status": "error",
      "message": "Invalid file type. Only image/jpeg, image/png, image/gif, video/mp4, video/webm, video/ogg, application/pdf are allowed.",
      "original_user_filename": "unsupported.txt"
    },
    {
      "status": "error",
      "message": "File size exceeds limit (50MB).",
      "original_user_filename": "large_file.zip"
    }
  ]
}
            

2. ดึงไฟล์มีเดีย (GET Request)

ใช้ Endpoint นี้เพื่อเรียกดูไฟล์มีเดีย (รูปภาพ วิดีโอ หรือเอกสาร PDF) คุณสามารถระบุไฟล์มีเดียได้ด้วย **uuid (แนะนำ)** หรือ filename (จาก unique_base_name ที่ได้จาก Response ของการอัปโหลด)

**สำคัญ**: ระบบนี้รองรับการส่งคืนเฉพาะไฟล์ต้นฉบับเท่านั้น ไม่มีการปรับขนาดรูปภาพอัตโนมัติเป็นขนาด S, M, L อีกต่อไป ไม่ว่าจะระบุ size parameter เป็นอะไรก็ตาม API จะส่งคืนไฟล์ต้นฉบับเสมอ

Endpoint URL (Rewritten):

https://stux.pro/media/
(ตามด้วย UUID หรือ filename และขนาดที่ต้องการ)

Method:

GET

Path Parameters:

ตัวอย่าง Request URLs (Rewritten):

ตัวอย่าง Response (Success):

API จะส่งคืนเนื้อหาไฟล์มีเดียโดยตรง (binary data) ด้วย Header Content-Type ที่เหมาะสม (เช่น image/jpeg, video/mp4, application/pdf)

ตัวอย่าง Response (Error - JSON):


{
  "status": "error",
  "message": "Media not found on server or not accessible."
}
            

3. ลบไฟล์มีเดีย (DELETE Request)

ใช้ Endpoint นี้เพื่อลบไฟล์มีเดีย (รูปภาพ วิดีโอ หรือเอกสาร PDF) และข้อมูลที่เกี่ยวข้องทั้งหมดออกจากเซิร์ฟเวอร์และฐานข้อมูล คุณสามารถระบุไฟล์มีเดียด้วย **uuid (แนะนำ)** หรือ id

Endpoint URL (Rewritten):

https://stux.pro/media/delete/uuid/ หรือ https://stux.pro/media/delete/id/
(ตามด้วย UUID หรือ ID ของไฟล์มีเดียที่ต้องการลบ)

Method:

DELETE

Path Parameters:

ตัวอย่าง Request URL (Rewritten):

ตัวอย่าง Request (JavaScript Fetch API):


const mediaUuidToDelete = 'a1b2c3d4-e5f6-7890-1234-567890abcdef'; // แทนที่ด้วย UUID ไฟล์มีเดียจริง

fetch(`https://stux.pro/media/delete/uuid/${mediaUuidToDelete}`, {
    method: 'DELETE'
})
.then(response => response.json())
.then(data => {
    console.log('Delete Response:', data);
    if (data.status === 'success') {
        alert(`ไฟล์มีเดีย UUID ${mediaUuidToDelete} ถูกลบเรียบร้อยแล้ว`);
    } else {
        alert(`การลบล้มเหลว: ${data.message}`);
    }
})
.catch(error => {
    console.error('Delete Error:', error);
    alert('เกิดข้อผิดพลาดในการลบไฟล์มีเดีย');
});
            

ตัวอย่าง Response (Success - JSON):


{
  "status": "success",
  "message": "Media file deleted successfully.",
  "identifier": "a1b2c3d4-e5f6-7890-1234-567890abcdef",
  "identifier_type": "uuid",
  "deleted_files_count": 1
}
            

ตัวอย่าง Response (Error - JSON):


{
  "status": "error",
  "message": "Media not found in database."
}