كيف القضبان تكوين الوصول إلى وسائل الإعلام من الموارد التقليدية في دليل الموقع ؟
-
06-07-2019 - |
سؤال
دعونا نقول لدي صورة لا تتواجد في الطبيعي الموقع:
{appname}/public/images/unconventional.gif
ولكن بدلا من ذلك هنا:
{appname}/unconventional.gif
أنا أفهم أن هذا هو انتهاك كامل القضبان الاتفاقيات غير أخلاقي و لا يجب أن تفعل هذا تحت أي ظرف من الظروف ، وعلاوة على ذلك, لماذا أنا حتى توحي مثل هذه الحماقة الشيء ؟
حسنا, الآن علينا أن الخروج من الطريق ، على افتراض أنا على ويندوز وبالتالي وصلات رمزية من السؤال: كيف يمكن وضع هذا الأمر ؟
المحلول
القضبان لا يخدم هذه الصور ، فإنه يتيح ملقم ويب تفعل ذلك.من الأفضل تغيير تكوين ملقم ويب الخاص بك للتعامل مع هذا السيناريو.إذا كنت تستخدم Apache
, على سبيل المثال ، فإنه من السهل اقامة مع mod_rewrite
.
صنع القضبان تخدم هذه الصور سوف تكون قبيحة ، لكنه هو ممكن إذا توفر طريقا في routes.rb
أن المباريات /public/images/unconventional.gif
, و إذا كان الملف نفسه غير موجود.على سبيل المثال:
map.connect "public/images/unconventional.gif",
:controller => "static_image_controller",
:action => "serve"
ثم إنشاء وحدة تحكم StaticImageController
:
class StaticImageController < ApplicationController
def serve
image = File.read(File.join(Rails.root, "unconventional.gif"))
send_data image, :type => "image/gif", :disposition => "inline"
end
end
تحذير: إذا كنت تستخدم مفهوم أعلاه ، لاحظ أنه إذا كنت تستخدم مدخلات من العنوان إلى أن تقرر أي ملف لخدمة (مع params[:file]
, على سبيل المثال) ، تحتاج إلى تماما تطهير المدخلات ، لأنك المخاطرة وتعريض نظام الملفات الخاص بك كامل إلى العالم الخارجي.