Skip to content

رفع الملفات باستخدام API Token

رفع الملفات عبر API 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 مطلوبتين. تتضمن الاستجابة قناة الرفع الافتراضية، ومفاتيح قنوات الرفع، وأسماء القنوات الفرعية، وحالة موازنة الحمل. ولا تُعاد الأسرار أو رموز التحديث أو أي قيم إعدادات حساسة أخرى.

اختيار وضع الرفع

الوضعالأنسب لـالوصف
الرفع بطلب واحدالملفات الصغيرة، السكربتات البسيطة، اختبارات الاتصاليرسل الملف كاملًا إلى /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"

يمكنك أيضًا وضع الرمز في متغير بيئة:

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 كلما أمكن.

للقنوات التالية عتبات حظر صريحة لطلب /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>نعمعنوان موقع 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عنوان 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معرّف الملف، ويفيد في الاستعلامات أو الإدارة أو السجلات لاحقًا.
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"
}

الأسئلة الشائعة

تفشل عمليات الرفع الكبيرة بطلب واحد

يرسل /upload بطلب واحد الملف كاملًا في طلب واحد. وقد تحظر Cloudflare أو المنصة البعيدة الملفات الكبيرة. استخدم سكربت الرفع المجزأ للملفات الكبيرة.

تم ضبط --channel-name لكن الرفع ما زال يفشل

تحقق من أن القناة المحددة تحتوي فعلًا على قناة فرعية بهذا الاسم وأنها مفعّلة. إذا لم يتم تمرير --channel-name، يختار الخادم الخلفي حسابًا متاحًا وفق إعدادات تلك القناة.

أريد استخدام النتيجة في برنامج آخر

استخدم --output json، أو أضف --save-response result.json. اقرأ الحقل url للحصول على عنوان URL الكامل للملف.

لا يستطيع Yandex رفع الأرشيفات

لا يدعم Yandex صيغ الأرشيف. قد يكون ذلك بسبب سياسة المنصة. عند استخدام Yandex، ارفع ملفات غير أرشيفية كلما أمكن.

Released as user documentation for ImgHost.