Skip to content

การอัปโหลดไฟล์ผ่าน API Token

การอัปโหลดผ่าน API Token เหมาะสำหรับสคริปต์ งานอัตโนมัติ และโปรแกรมของบุคคลที่สาม คุณไม่จำเป็นต้องเปิดเว็บ UI เพียงระบุ URL ของไซต์, token, เส้นทางไฟล์ในเครื่อง และช่องทางอัปโหลดจริง ก็สามารถอัปโหลดไฟล์ไปยัง ImgHost ได้ และผลตอบกลับจะมี URL ของไฟล์

แก้ไข API Token

ก่อนเริ่ม

เปิดแผงผู้ดูแลระบบ แล้วไปที่:

text
System Settings -> Security Settings -> API Token

เมื่อสร้างหรือแก้ไข API Token ให้ตรวจสอบว่ามีสิทธิ์อัปโหลดและใช้ช่องทางอัปโหลดเริ่มต้นที่เป็นช่องทางจริง การอัปโหลดผ่าน API Token จะไม่ใช้ทางเข้าการจัดส่งอัจฉริยะ และสคริปต์ก็ควรส่งช่องทางจริงด้วย

ดาวน์โหลดสคริปต์อัปโหลด

ชุดเอกสารมีสคริปต์ Node.js สองตัว:

สคริปต์วัตถุประสงค์
สคริปต์อัปโหลดแบบคำขอเดียวเรียก /upload หนึ่งครั้ง เหมาะสำหรับไฟล์ขนาดเล็กและการทดสอบการเชื่อมต่อ
สคริปต์อัปโหลดแบบแบ่งส่วนใช้การแบ่งส่วนผ่าน API Token, การอัปโหลดโดยตรง หรือเซสชันอัปโหลดของแพลตฟอร์ม แนะนำสำหรับไฟล์ขนาดใหญ่

ต้องใช้ Node.js 18 หรือใหม่กว่า

แสดงช่องทางที่ใช้ได้

สคริปต์ทั้งสองสามารถแสดงช่องทางอัปโหลดที่ API Token ปัจจุบันใช้ได้:

powershell
node imghost-token-single-upload.mjs --base-url "https://your-domain" --token "your API Token" --list-channels
node imghost-token-chunk-upload.mjs --base-url "https://your-domain" --token "your API Token" --list-channels

เมื่อแสดงช่องทาง ไม่จำเป็นต้องใช้ --file และ --channel ผลตอบกลับจะมีช่องทางอัปโหลดเริ่มต้น, key ของช่องทางอัปโหลด, ชื่อช่องทางย่อย และสถานะการกระจายโหลด ความลับ token สำหรับรีเฟรช และค่าการตั้งค่าที่ละเอียดอ่อนอื่น ๆ จะไม่ถูกส่งกลับ

เลือกโหมดอัปโหลด

โหมดเหมาะสำหรับคำอธิบาย
อัปโหลดแบบคำขอเดียวไฟล์ขนาดเล็ก สคริปต์ง่าย ๆ การทดสอบการเชื่อมต่อส่งไฟล์ทั้งไฟล์ไปยัง /upload ในคำขอเดียว
อัปโหลดแบบแบ่งส่วนไฟล์ขนาดใหญ่หรือไฟล์ที่มีแนวโน้มหมดเวลาสคริปต์จะเลือกขั้นตอนแบบแบ่งส่วน โดยตรง หรือเซสชันอัปโหลดที่เหมาะกับช่องทาง

สำหรับไฟล์ขนาดใหญ่ ให้ใช้สคริปต์อัปโหลดแบบแบ่งส่วนก่อน การอัปโหลดแบบคำขอเดียวถูกจำกัดด้วยขนาดคำขอของ Cloudflare, หน่วยความจำ Worker และข้อจำกัดของแต่ละแพลตฟอร์ม

อัปโหลดแบบคำขอเดียว

สคริปต์แบบคำขอเดียวจะส่งคำขอหนึ่งครั้งไปยัง /upload

powershell
node imghost-token-single-upload.mjs `
  --base-url "https://your-domain" `
  --token "your API Token" `
  --file "D:\test\image.png" `
  --channel s3 `
  --folder "photos/2026"

คุณสามารถใส่ token ไว้ในตัวแปรสภาพแวดล้อมได้ด้วย:

powershell
$env:IMGHOST_API_TOKEN="your API Token"
node imghost-token-single-upload.mjs --base-url "https://your-domain" --file "D:\test\image.png" --channel s3

พารามิเตอร์แบบคำขอเดียว

พารามิเตอร์จำเป็นคำอธิบาย
--base-url <url>ใช่URL ของไซต์ ImgHost เช่น https://image.ai6.me
--token <token>ใช่API Token สามารถใช้ตัวแปรสภาพแวดล้อม IMGHOST_API_TOKEN ได้ด้วย
--file <path>ใช่เส้นทางไฟล์ในเครื่อง
--channel <key>ใช่ช่องทางอัปโหลด
--folder <path>ไม่โฟลเดอร์อัปโหลด เช่น photos/2026 หรือ /user/
--name-type <type>ไม่โหมดการตั้งชื่อ จับคู่กับ uploadNameType ของฝั่งเซิร์ฟเวอร์ ค่าเริ่มต้นคือ default
--channel-name <name>ไม่เลือกช่องทางย่อยหรือบัญชี หากไม่ระบุ การตั้งค่าช่องทางฝั่งเซิร์ฟเวอร์จะเป็นผู้ตัดสินใจ
--retries <n>ไม่จำนวนครั้งที่ลองใหม่เมื่อเกิดความล้มเหลวชั่วคราว ค่าเริ่มต้นคือ 3
--timeout-ms <n>ไม่เวลาหมดอายุคำขอ ค่าเริ่มต้นคือ 180000
--output <pretty|json>ไม่รูปแบบผลลัพธ์ ค่าเริ่มต้นคือ pretty
--save-response <path>ไม่บันทึกผลตอบกลับ JSON สุดท้ายลงไฟล์
--list-channelsไม่แสดงช่องทางที่ token ปัจจุบันใช้ได้ แล้วออก

ช่องทางแบบคำขอเดียว

key ช่องทางช่องทาง
telegram / tgTelegram
discord / dcDiscord
cfr2 / r2Cloudflare R2
s3S3
webdav / wdช่องทางจัดเก็บ WebDAV
github / ghGitHub Releases
gitlab / glGitLab Packages
huggingface / hfHugging Face
onedrive / odOneDrive
googledrive / google / gdGoogle Drive
dropbox / dbDropbox
yandex / yxYandex Disk
pcloud / pdpCloud

ขีดจำกัดขนาดแบบคำขอเดียว

หากเป็นไปได้ ให้ไฟล์แบบคำขอเดียวมีขนาดต่ำกว่า 100 MB

ช่องทางเหล่านี้มีเกณฑ์บล็อก /upload แบบคำขอเดียวในสคริปต์:

ช่องทางขีดจำกัดแบบคำขอเดียว
Telegram20 MiB
Discord10 MiB
S364 MiB
WebDAV64 MiB
GitHub Releases64 MiB
GitLab Packages64 MiB

เมื่อไฟล์เกินขีดจำกัดใดขีดจำกัดหนึ่ง สคริปต์จะแจ้งข้อผิดพลาดที่ตรงกันในเครื่อง ช่องทางอื่นไม่มีการตรวจสอบ 100 MB แบบตายตัวในสคริปต์ หากเนื้อหาคำขอเกินความสามารถของ Cloudflare หรือแพลตฟอร์ม Cloudflare หรือแพลตฟอร์มระยะไกลจะส่งคืนข้อผิดพลาด

อัปโหลดแบบแบ่งส่วน

สคริปต์อัปโหลดแบบแบ่งส่วนจะขอให้ฝั่งเซิร์ฟเวอร์ระบุไฟล์เป้าหมายก่อน จากนั้นจึงทำตามขั้นตอนไฟล์ขนาดใหญ่ของช่องทางที่เลือก คุณไม่จำเป็นต้องเขียนคำขอสร้างเซสชันส่วนย่อย รวมส่วน หรือเสร็จสิ้นเอง

powershell
node imghost-token-chunk-upload.mjs `
  --base-url "https://your-domain" `
  --token "your API Token" `
  --file "D:\test\video.zip" `
  --channel github `
  --folder "photos/2026" `
  --concurrency 3

พารามิเตอร์อัปโหลดแบบแบ่งส่วน

พารามิเตอร์จำเป็นคำอธิบาย
--base-url <url>ใช่URL ของไซต์ ImgHost
--token <token>ใช่API Token สามารถใช้ตัวแปรสภาพแวดล้อม IMGHOST_API_TOKEN ได้ด้วย
--file <path>ใช่เส้นทางไฟล์ในเครื่อง
--channel <key>ใช่ช่องทางอัปโหลด
--folder <path>ไม่โฟลเดอร์อัปโหลด
--name-type <type>ไม่โหมดการตั้งชื่อ จับคู่กับ uploadNameType ของฝั่งเซิร์ฟเวอร์ ค่าเริ่มต้นคือ default
--channel-name <name>ไม่เลือกช่องทางย่อยหรือบัญชี หากไม่ระบุ การตั้งค่าช่องทางฝั่งเซิร์ฟเวอร์จะเป็นผู้ตัดสินใจ
--concurrency <n>ไม่จำนวนอัปโหลดพร้อมกัน ค่าเริ่มต้นคือ 1, สูงสุด 3
--retries <n>ไม่จำนวนครั้งที่ลองใหม่เมื่อเกิดความล้มเหลวชั่วคราว ค่าเริ่มต้นคือ 3
--timeout-ms <n>ไม่เวลาหมดอายุของแต่ละคำขอ ค่าเริ่มต้นคือ 180000
--output <pretty|json>ไม่รูปแบบผลลัพธ์ ค่าเริ่มต้นคือ pretty
--save-response <path>ไม่บันทึกผลตอบกลับ JSON สุดท้ายลงไฟล์
--list-channelsไม่แสดงช่องทางที่ token ปัจจุบันใช้ได้ แล้วออก

ช่องทางแบบแบ่งส่วน

key ช่องทางขั้นตอนอัปโหลด
telegram / tgเซสชัน /upload แบบแบ่งส่วนจริง
discord / dcเซสชัน /upload แบบแบ่งส่วนจริง
cfr2 / r2เซสชัน /upload แบบแบ่งส่วนจริง
github / ghเซสชัน /upload แบบแบ่งส่วนจริง
gitlab / glเซสชัน /upload แบบแบ่งส่วนจริง
webdav / wdเซสชัน /upload แบบแบ่งส่วนจริง
s3การอัปโหลดหลายส่วนของ S3
onedrive / odเซสชันอัปโหลด OneDrive
googledrive / google / gdการอัปโหลดแบบดำเนินต่อได้ของ Google Drive
dropbox / dbเซสชันอัปโหลด Dropbox
yandex / yxURL อัปโหลดโดยตรงของ Yandex
pcloud / pdลิงก์อัปโหลด pCloud
huggingface / hfการอัปโหลด Hugging Face LFS

ตัวอย่างไฟล์บีบอัดของ Yandex ไม่เสถียรในการทดสอบ ยืนยันแล้วว่าไฟล์ที่ไม่บีบอัดอัปโหลดได้สำเร็จ

ผลตอบกลับหลังอัปโหลด

หลังจากอัปโหลดสำเร็จ สคริปต์จะแสดง:

text
success
src: /file/photos/2026/example.png
url: https://your-domain/file/photos/2026/example.png
fileId: photos/2026/example.png
ฟิลด์คำอธิบาย
srcเส้นทางไฟล์ภายในไซต์
urlURL สาธารณะแบบเต็ม เหมาะสำหรับสคริปต์ของคุณหรือบันทึกฐานข้อมูล
fileIdID ไฟล์ มีประโยชน์สำหรับการค้นหา การจัดการ หรือบันทึกภายหลัง
channelNameสคริปต์แบบแบ่งส่วนอาจส่งคืนช่องทางย่อยหรือบัญชีที่ใช้งานจริง

เมื่อใช้ --output json สคริปต์จะแสดงผลตอบกลับ JSON เต็มสำหรับการใช้งานเชิงโปรแกรม

เรียก API แบบคำขอเดียวโดยตรง

หากไม่ใช้สคริปต์ คุณสามารถเรียกจุดปลายอัปโหลดแบบคำขอเดียวโดยตรงได้:

text
POST https://your-domain/upload?uploadChannel=s3&uploadFolder=photos/2026&uploadNameType=default
Authorization: Bearer your API Token
Content-Type: multipart/form-data

ฟิลด์ฟอร์ม:

ฟิลด์จำเป็นคำอธิบาย
fileใช่ไฟล์ที่จะอัปโหลด

พารามิเตอร์คำขอ:

พารามิเตอร์จำเป็นคำอธิบาย
uploadChannelใช่ช่องทางอัปโหลดจริง
uploadFolderไม่โฟลเดอร์อัปโหลด
uploadNameTypeไม่โหมดการตั้งชื่อ
channelNameไม่เลือกช่องทางย่อยหรือบัญชี

ผลตอบกลับที่สำเร็จมีลักษณะดังนี้:

json
{
  "success": true,
  "src": "/file/photos/2026/example.png",
  "url": "https://your-domain/file/photos/2026/example.png",
  "fileId": "photos/2026/example.png"
}

FAQ

การอัปโหลดไฟล์ใหญ่แบบคำขอเดียวล้มเหลว

/upload แบบคำขอเดียวส่งไฟล์ทั้งไฟล์ในคำขอเดียว ไฟล์ขนาดใหญ่อาจถูก Cloudflare หรือแพลตฟอร์มระยะไกลบล็อก ใช้สคริปต์อัปโหลดแบบแบ่งส่วนสำหรับไฟล์ขนาดใหญ่

ตั้งค่า --channel-name แล้ว แต่อัปโหลดยังล้มเหลว

ตรวจสอบว่าช่องทางที่เลือกมีช่องทางย่อยชื่อนั้นจริงและเปิดใช้อยู่ หากไม่ระบุ --channel-name ฝั่งเซิร์ฟเวอร์จะเลือกบัญชีที่ใช้ได้ตามการตั้งค่าของช่องทางนั้น

ต้องการใช้ผลลัพธ์ในโปรแกรมอื่น

ใช้ --output json หรือเพิ่ม --save-response result.json อ่านฟิลด์ url เพื่อรับ URL ไฟล์แบบเต็ม

Yandex อัปโหลดไฟล์บีบอัดไม่ได้

Yandex ไม่รองรับรูปแบบไฟล์บีบอัด อาจเกิดจากนโยบายของแพลตฟอร์ม เมื่อใช้ Yandex ให้พยายามอัปโหลดไฟล์ที่ไม่ใช่ไฟล์บีบอัด

Released as user documentation for ImgHost.