
ستون حاوية على خادم واحد
صندوق معادن عارية واحد يشغل عشرات إلى مئات حاويات Hoody. يجعل KSM و BTRFS dedup التكلفة الإضافية قريبة من الصفر.
hoody-pipe يقدّم بالفعل نموذج رفع ويب على كل مسار يملكه. اسحب ملفاً إلى الصفحة، فتتدفّق البايتات عبر الأنبوب وصولاً إلى stdin الخاصّ بسكربتك. لم تكتب سطراً واحداً من كود الرفع.
أفلت ملفاً أو انقر للرفع
أيّ حجم · أيّ نوعبدون كود رفع، بدون دلو S3، بدون روابط مُوقَّعة مسبقاً
hoody-pipe يُشغّل واجهة ويب عند جذر المسار، وبديلاً يعمل بدون JavaScript عند /noscript. كلاهما يبثّ بايتات multipart مباشرة إلى من يقرأ المسار نفسه. سكربتك يقرأ الأنبوب — هذا كلّ التوصيل الموجود.
https://pipe.hoody.com/uploadأيّ مسار لم تحجزه يصبح أنبوباً. الرابط هو صفحة الرفع.
GET /upload — نموذج رفع يُقدَّم تلقائياًHoody يقدّم لك النموذج: منطقة إفلات، مُحلّل multipart، CSP nonce، كلّ ذلك مُضمّن. /noscript موجود للمتصفّحات المقيّدة.
PUT /api/v1/pipe/upload (multipart/form-data)يُفكّ غلاف أوّل جزء multipart ويُبثّ إلى المستقبِل. لا تخزين على الخادم، لا ملفات مؤقّتة.
curl …/api/v1/pipe/upload | python process.pyالمستقبِل والمُرسِل يتّصلان خلال TTL مدّته 5 دقائق. السكربت لا يعرف أنه خلف صفحة ويب — يقرأ البايتات فقط.
الأنبوب هو خادم الرفع. سكربتك هو المستقبِل. لا توجد عمليّة ثالثة — لا Lambda، لا API gateway، لا دالة وصل — بين منطقة الإفلات وstdin الخاصّ بك.
كلّ بند أدناه يمثّل عمل يوم عاديّ لبناء أداة رفع لمرّة واحدة. الأنبوب يأتي بكلّ ذلك جاهزاً.
واجهة الأنبوب تعرض منطقة سحب وإفلات، وبديلاً بالنقر للاختيار، وعرض تقدّم. /noscript يقدّم نموذج HTML خالصاً للمتصفّحات بدون JS — نفس المسار، بدون كود إضافيّ.
عندما يُرسل المتصفّح multipart/form-data بـ POST، يستخرج الخادم أوّل جزء ويبثّه. لا تخزين مؤقّت للجسم، لا تنظيف ملفات مؤقّتة، لا مكتبة multipart من عشرة أسطر.
النموذج يُشحن مع CSP nonce جديد. أنواع المحتوى الخطرة (text/html, image/svg+xml, application/javascript) تُعاد كتابتها إلى text/plain قبل وصولها إليك. OPTIONS يتولّى preflight عبر النطاقات.
شغّل سكربتك قبل أن يرفع أحد، أو بعد ذلك — الأنبوب يحتفظ بالاتصال حتى TTL مدّته 5 دقائق إلى أن يحضر الطرفان. عدد المستقبِلين (n) قابل للتعديل حتى 256.
جنباً إلى جنب: مسار الرفع الذي كنت ستبنيه، مقابل الرابط الذي توجّه إليه سكربتك.
أنت كتبت السكربت. Hoody كتب نموذج الرفع.
process.py — يقرأ stdin، يقوم بالعمل
while read chunk; do …الصفحة، النموذج، المُحلّل، الأمان
GET /upload — يُقدَّم تلقائياًالأنماط التي يلجأ إليها المطوّرون عند حاجتهم لرفع ملفّ لمرّة واحدة. كلّ واحد منها يفرض ضريبة إعداد — دلاء للتجهيز، middleware للتثبيت، مفاتيح توقيع للتدوير. الأنبوب هو رابط.
اختر مساراً. اقرأ الأنبوب. نموذج الرفع جاهز بالفعل على ذلك الرابط.