Skip to content

آپلود فایل با API Token

آپلود فایل با API Token برای اسکریپت‌ها، کارهای خودکار و برنامه‌های بیرونی مناسب است. نیازی نیست صفحه ImgHost را در مرورگر باز کنید؛ کافی است نشانی سایت، API Token، مسیر فایل محلی و یک کانال واقعی آپلود را بدهید. پس از موفقیت، اسکریپت لینک فایل را برمی‌گرداند.

ویرایش API Token

آماده‌سازی

در پنل مدیریت باز کنید:

text
System Settings -> Security Settings -> API Token

هنگام ساخت یا ویرایش API Token، مطمئن شوید مجوز آپلود فعال است و کانال پیش‌فرض نیز یک کانال واقعی است. آپلود با API Token از توزیع هوشمند استفاده نمی‌کند؛ بنابراین در اسکریپت __smart__ نفرستید. از کلید کانال واقعی مانند s3، github یا telegram استفاده کنید.

دانلود اسکریپت‌های آپلود

مستندات ImgHost دو اسکریپت Node.js دارد:

اسکریپتکاربرد
اسکریپت آپلود با یک درخواستفقط یک بار /upload را فراخوانی می‌کند؛ مناسب فایل‌های کوچک و آزمون اتصال رابط
اسکریپت آپلود بخش‌بخشبسته به کانال از آپلود بخش‌بخش، آپلود مستقیم یا نشست پلتفرم استفاده می‌کند؛ مناسب فایل‌های بزرگ

برای اجرا، 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 نیست. نتیجه شامل کانال پیش‌فرض، کلید کانال اصلی، نام کانال‌های فرعی و وضعیت توازن بار است. کلیدهای محرمانه، توکن‌های تازه‌سازی یا تنظیمات حساس برگردانده نمی‌شوند.

انتخاب روش آپلود

روشمناسب برایرفتار
آپلود با یک درخواستفایل کوچک، اسکریپت ساده، آزمون رابطکل فایل را در یک درخواست به /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"

API 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>بلهنشانی سایت 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خیرفقط کانال‌ها را نشان می‌دهد و فایلی آپلود نمی‌کند

کلیدهای کانال

کلید کانالکانال
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 باشد. کانال‌های زیر در اسکریپت محدودیت محلی روشن دارند:

کانالحد بالا
Telegram20 MiB
Discord10 MiB
S364 MiB
WebDAV64 MiB
GitHub Releases64 MiB
GitLab Packages64 MiB

اگر فایل از حد بگذرد، اسکریپت پیش از ارسال درخواست خطای محلی نشان می‌دهد. برای کانال‌های دیگر، اسکریپت حد محلی ثابت 100 MB نمی‌گذارد؛ اگر درخواست بیش از توان Cloudflare یا پلتفرم مقصد باشد، خطا از همان‌جا برمی‌گردد.

آپلود بخش‌بخش

اسکریپت آپلود بخش‌بخش ابتدا با API Token از سمت سرور می‌خواهد مقصد آپلود را تعیین کند، سپس مسیر فایل بزرگ مربوط به کانال انتخاب‌شده را اجرا می‌کند. کاربر لازم نیست خودش نشست بسازد، بخش‌ها را بفرستد، فایل را ادغام کند یا درخواست تکمیل بنویسد.

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>بلهنشانی سایت 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خیرفقط کانال‌ها را نشان می‌دهد و آپلود انجام نمی‌دهد

مسیرهای آپلود بخش‌بخش

کلید کانالمسیر آپلود
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لینک آپلود مستقیم Yandex
pcloud / pdلینک آپلود pCloud
huggingface / hfآپلود Hugging Face LFS

در آزمایش‌ها، فایل‌های آرشیوی یا فشرده روی Yandex قابل اتکا نبودند. هنگام استفاده از کانال 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لینک کامل دسترسی، مناسب برای ذخیره مستقیم در اسکریپت یا پایگاه داده
fileIdشناسه فایل برای جست‌وجو، مدیریت یا ثبت بعدی
channelNameدر آپلود بخش‌بخش ممکن است کانال فرعی یا حساب واقعاً استفاده‌شده را نشان دهد

با --output json، اسکریپت JSON کامل را چاپ می‌کند تا برنامه‌ها راحت‌تر آن را پردازش کنند.

فراخوانی مستقیم رابط تک‌درخواستی

بدون اسکریپت هم می‌توان رابط آپلود با یک درخواست را مستقیم فراخوانی کرد:

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"
}

پرسش‌های رایج

فایل بزرگ در آپلود با یک درخواست موفق نمی‌شود

در /upload تک‌درخواستی، کل فایل در یک درخواست فرستاده می‌شود. فایل بزرگ ممکن است به محدودیت Cloudflare، حافظه Worker یا پلتفرم مقصد برخورد کند. برای فایل‌های بزرگ از اسکریپت آپلود بخش‌بخش استفاده کنید.

با --channel-name هم خطا می‌گیرم

بررسی کنید در آن کانال، کانال فرعی با همان نام دقیق وجود داشته باشد و فعال باشد. اگر --channel-name ندهید، سمت سرور بر اساس تنظیمات کانال یک حساب در دسترس انتخاب می‌کند.

می‌خواهم نتیجه را در برنامه دیگری استفاده کنم

از --output json یا --save-response result.json استفاده کنید. برنامه می‌تواند فیلد url را بخواند و لینک کامل فایل را بگیرد.

آپلود آرشیو در Yandex شکست می‌خورد

Yandex از قالب‌های آرشیوی یا فشرده به شکل قابل اتکا پشتیبانی نمی‌کند و ممکن است این موضوع به سیاست‌های پلتفرم مربوط باشد. برای Yandex از فایل غیرآرشیوی استفاده کنید.

Released as user documentation for ImgHost.