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

ก่อนเริ่ม
เปิดแผงผู้ดูแลระบบ แล้วไปที่:
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 / tg | Telegram |
discord / dc | Discord |
cfr2 / r2 | Cloudflare R2 |
s3 | S3 |
webdav / wd | ช่องทางจัดเก็บ WebDAV |
github / gh | GitHub Releases |
gitlab / gl | GitLab Packages |
huggingface / hf | Hugging Face |
onedrive / od | OneDrive |
googledrive / google / gd | Google Drive |
dropbox / db | Dropbox |
yandex / yx | Yandex Disk |
pcloud / pd | pCloud |
ขีดจำกัดขนาดแบบคำขอเดียว
หากเป็นไปได้ ให้ไฟล์แบบคำขอเดียวมีขนาดต่ำกว่า 100 MB
ช่องทางเหล่านี้มีเกณฑ์บล็อก /upload แบบคำขอเดียวในสคริปต์:
| ช่องทาง | ขีดจำกัดแบบคำขอเดียว |
|---|---|
| Telegram | 20 MiB |
| Discord | 10 MiB |
| S3 | 64 MiB |
| WebDAV | 64 MiB |
| GitHub Releases | 64 MiB |
| GitLab Packages | 64 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 / yx | URL อัปโหลดโดยตรงของ 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 | เส้นทางไฟล์ภายในไซต์ |
url | URL สาธารณะแบบเต็ม เหมาะสำหรับสคริปต์ของคุณหรือบันทึกฐานข้อมูล |
fileId | ID ไฟล์ มีประโยชน์สำหรับการค้นหา การจัดการ หรือบันทึกภายหลัง |
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 ให้พยายามอัปโหลดไฟล์ที่ไม่ใช่ไฟล์บีบอัด