المشكلة هي أن شبكة توصيل المحتوى (CDN) تُظهر سلوكًا معطلاً، وهو ما لا تريد بالتأكيد. فقط النسخة غير التابعة لشبكة توصيل المحتوى تعمل بشكل صحيح، حيث عند النقر على “تنزيل” يتم تنزيل شيء ما.
آه، نعم، إذن يجب علينا الإصلاح.
هذا معقول. هل توجد أي أمثلة لتخصيص صندوق العرض الخفيف يمكنني استخدامها كنقطة انطلاق؟
هذا غير قابل للاختراق بسهولة على الإطلاق وفقًا لـ:
ستحتاج إلى الاطلاع على Magnific Popup: Responsive jQuery Lightbox Plugin لمعرفة ما إذا كان يمكن إعادة تكوينه ديناميكيًا بأي طريقة.
يا له من أمر محبط، سأحاول إيجاد حل.
فقط بدافع الفضول: لماذا يختار Discourse إجراء ‘تنزيل’ بدلاً من ‘عرض الحجم الكامل’ هنا؟ من منظور المستخدم، يبدو أن عرض الحجم الكامل هو الإجراء الأكثر شيوعًا؟
ظننت أن المشكلة تتعلق بـ MIME، ولكن عند النظر إلى الرأس، قد تكون:
x-download-options: noopen
التي تمنع فتح الملف عند تنزيله. نأمل أن يقوم سام بتوضيح ذلك.
هذا قرار @codinghorror، أعتقد أن هذه إحدى الطرق التي يمكنك من خلالها الاحتفاظ باسم الملف الأصلي الذي تم رفعه بشكل نظيف، وهو ما يهتم به بعض الأشخاص. بالإضافة إلى ذلك، يبدو أن هذا هو ما يفعله Flickr.
لا أعتقد أننا سنلمس أيًا من هذا، سنقوم فقط بجعل التطبيق يعمل كوكيل لهذا الإجراء في مسار مخصص أو ما شابه، حيث إن عدد الأشخاص الذين يضغطون على “تنزيل” ضئيل جدًا، وقد يكون تجاوز شبكة توصيل المحتوى (CDN) مقبولاً هنا. على أي حال، يمكن لـ @pmusaraj تحديد أفضل إجراء. بناءً على ما أستطيع استنتاجه، إما أن نطلب من AWS تزويدنا برابط موقع موقّع مع محتوى مخصص خاص، أو نحتاج إلى عمل وكيل للملف. كلا الحالتين ستتضمن تجاوز شبكة توصيل المحتوى (CDN) الخاصة بـ S3. إذا قمنا بعمل وكيل عبر التطبيق، فيمكننا على الأقل استخدام شبكة توصيل المحتوى (CDN) الخاصة بالتطبيق.
بعد قراءة إضافية قليلاً، يبدو أن content-disposition: attachment; و x-download-options: noopen هما المسؤولان عن هذا السلوك.
أقدر أن هذا يوضح الكيفية وليس السببية. ومع ذلك، إذا كان الأمر لأسباب أمنية، فإن ذلك منطقي تماماً.
هذا الطلب من المفترض أن يحل المشكلة عن طريق:
- إضافة
data-download-hrefإلى رابط التحميل في نافذة العرض الموسع (lightbox) عند تمكين تحميلات S3. - استخدام عنوان URL جديد يعتمد على مخطط عناوين URL القصيرة مع معلمة
dl=1، مما سيجعل المتحكم يولد عنوان URL موقعًا لـ S3 مع محتوى التكوين الصحيح واسم الملف.
بمعنى آخر، سيظهر رابط التحميل في نافذة العرض الموسع الآن على النحو التالي: /uploads/short-url/mTGbg4Ld2iBYAbfTvEjGXP2LtVm.pdf?dl=1، والذي سيعيد التوجيه إلى عنوان URL موقع لـ S3 مع content-disposition: "attachment; filename=original.png".
أعتقد أن هذا هو الخيار الأبسط والأكثر مباشرة، حيث أن التوجيه عبر التطبيق سيكون أقل كفاءة قليلاً، لأن الملف المُحمّل سيتعين عليه الانتقال من S3 إلى خادم Discourse ثم إلى العميل.