Massenaktion Hilfe: Hotlinked Bilder durch lokale Bilddateien ersetzen

Szenario:

  • Ein kostenloser Image-Hoster (foo-host in diesem Beispiel) ist ausgefallen, und ein Discourse-Forum hat derzeit eine Reihe von Bildern in seinen Beiträgen, die direkt verlinkt sind.
  • Die Bilder wurden manuell gesichert, bevor sie verrotteten, und existieren auf dem lokalen Dateisystem.
  • Es gibt eine Zuordnung zwischen der Bild-URL und dem lokalen Dateipfad: get_paths_from_hotlinked_urls()

Wie kann ich:

  1. Für jedes dieser Bilder einen Anhang in Rails erstellen und
  2. Sie korrekt zum Beitrag hinzufügen?
image_host_domain = 'foo-host.com'

hotlink_posts = Post.where('cooked ~ ?', image_host_domain)
puts "found #{hotlink_posts.length} posts with hotlinked images..."

hotlink_posts.each do |p|
  # Alle URLs im Beitrag abrufen, die image_host_domain enthalten
  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) 'upload' local_paths[i] als Anhang
    #                und korrekt mit dem Beitrag verknüpfen

    # ***** TODO: 2) Hotlink durch Anhang ersetzen
    # new_raw = new_raw...
  end

  p.update(raw: new_raw)
end

Entschuldigung für den Beitrag mit geringem Aufwand. Ich fühle mich heute etwas gestresst, lol.

Kann mir jemand in die richtige Richtung weisen? Eine vollständige Lösung ist nicht erforderlich, wenn es zu viel Aufwand ist. Danke.

1 „Gefällt mir“

Sie können sich die Import-Skripte ansehen, um Beispiele dafür zu erhalten, wie Dateien hochgeladen und das HTML für diese Uploads eingefügt werden.

2 „Gefällt mir“