رمز تحديد التحميل المقيد يجعل من الصعب كتابة مكونات السمة التي تستخدم الأصول التي تم تحميلها

مرحباً بالجميع،

مؤخرًا كتبت مكون سمة لـ Discourse (GitHub - Beholder-Vision/discourse-insert-model-3d: A Discourse theme component for adding 3D models to topics) يسمح لمسؤولي Discourse بتمكين تحميل وعرض نماذج ثلاثية الأبعاد في منتدياتهم.

بدا الأمر يعمل بشكل جيد في البداية حتى تلقيت تقريرًا بأن بعض النماذج التي تم تحميلها قد اختفت، ثم عند فحص منتداي الخاص، رأيت أن الأصول التي تم تحميلها (النماذج ثلاثية الأبعاد وصور الملصقات) قد تم مسحها أيضًا Insert Model 3D - #2 by patrickemin.

عند قراءة المستندات (Understanding Uploads, Images, and Attachments)، افترضت أن الأصول التي تم تحميلها ستكون بخير لأنها مشار إليها بواسطة منشور، ولكن بعد إجراء بعض البحث، وجدت هذا الكود، discourse/app/models/post.rb at 03bb43f7468d3aa6e73bba0805193ae50c7ec2d5 · discourse/discourse · GitHub الذي يبدو أنه يقوم بعملية تحديد التحميلات على الخادم. من ما يمكنني فهمه، يتم احتساب الملف الذي تم تحميله على أنه مشار إليه بواسطة منشور فقط إذا تمت الإشارة إليه بواسطة أحد عدد محدود من علامات HTML. لذلك، سيتم التعرف على التحميل المرتبط إذا تمت الإشارة إليه بواسطة السمة href لعنصر <a> ولكن ليس إذا تمت الإشارة إليه بواسطة السمة src لعنصر <model-viewer> (وهو ما يضيفه مكون السمة الجديد الخاص بي).

هل يمكن لشخص على دراية بهذا الكود أن يؤكد ما إذا كان فهمي هنا صحيحًا أم لا؟ إذا كان الأمر كذلك، أعتقد أن الأشخاص الذين ينشئون مكونات السمات يمكنهم تمييز الأصول كتحميلات عن طريق إنشاء رابط <a> مخفي يشير إلى الأصل، ولكن سيكون من المفيد جدًا تحديث المستندات (Understanding Uploads, Images, and Attachments) لتسليط الضوء على هذه المشكلة.

شكراً جزيلاً
آلان

3 إعجابات

يبدو أن معلماتك ومصدرك يأتيان من تحليل JSON، لذا فإن القيام بذلك تلقائيًا يبدو صعبًا (على أقل تقدير).

أعتقد أنه على مستوى أساسي، هذا يطلب من واجهة برمجة التطبيقات “إرفاق” تحميل بشكل دائم بمنشور ووضع علامة عليه بطريقة لا يتم تنظيفها أبدًا.

هذا يفتح الباب أمام مشكلات أخرى (أين يمكنني رؤية التحميلات المرفقة بشكل دائم؟ ما هي الحدود؟).

ومع ذلك، يبدو الإرفاق الدائم هو الطريقة الوحيدة النظيفة لحل هذه المشكلة.

سيعمل الرابط المخفي بالفعل كحل بديل.

أقوم بتحويل هذا إلى طلب ميزة لأنه يعمل كما هو مصمم، ولكن واجهة برمجة التطبيقات لا تجعل حياتك سهلة هنا.

سأقوم بتمييز فريق dev-xp، الذين قد يكون لديهم المزيد من الأفكار حول هذا.