مساعدة الإجراء المجمع: استبدال الصور المرتبطة بالروابط الخارجية بملفات صور محلية

سيناريو:

  • تم إيقاف خدمة استضافة صور مجانية (foo-host في هذا المثال)، ويحتوي منتدى Discourse حاليًا على مجموعة من الصور المرتبطة بشكل مباشر في مشاركاته.
  • تم عمل نسخة احتياطية للصور يدويًا قبل أن تفسد وهي موجودة على نظام الملفات المحلي.
  • يوجد تعيين بين عنوان URL للصورة ومسار الملف المحلي: get_paths_from_hotlinked_urls()

كيف يمكنني:

  1. إنشاء مرفق في Rails لكل من هذه الصور و
  2. إضافتها إلى المنشور بشكل صحيح؟
image_host_domain = 'foo-host.com'

hotlink_posts = Post.where('cooked ~ ?', image_host_domain)
puts "تم العثور على #{hotlink_posts.length} منشورات بصور مرتبطة بشكل مباشر..."

hotlink_posts.each do |p|
  # الحصول على جميع عناوين URL في المنشور التي تحتوي على image_host_domain
  urls = URI.extract(p.cooked).select { |url| url[/#{Regexp.quote(image_host_domain)}/] }

  local_paths = get_paths_from_hotlinked_urls(urls)

  new_raw = p.raw
  urls.each.with_index do |url, i|
    next if local_paths[i].blank?

    # ***** TODO: 1) 'رفع' local_paths[i] كمرفق
    #                وربطه بالمنشور بشكل صحيح

    # ***** TODO: 2) استبدال الارتباط المباشر بالمرفق
    # new_raw = new_raw...
  end

  p.update(raw: new_raw)
end

آسف على المنشور ذي الجهد المنخفض. أشعر ببعض التوتر اليوم، هههه.

هل يمكن لأحد أن يوجهني في الاتجاه الصحيح؟ الحل الكامل غير مطلوب إذا كان الأمر يتطلب الكثير من المتاعب. شكرًا.

إعجاب واحد (1)

يمكنك الاطلاع على نصوص الاستيراد للحصول على أمثلة حول كيفية تحميل الملفات وإدراج ترميز HTML لتلك التحميلات.

إعجابَين (2)