Aide sur les actions groupées : remplacer les images liées par des fichiers d'image locaux

scénario :

  • un hébergeur d’images gratuit (foo-host dans cet exemple) a cessé d’exister, et un forum discourse contient un tas d’images hotlinkées dans ses publications
  • les images ont été sauvegardées manuellement avant qu’elles ne pourrissent et existent sur le système de fichiers local
  • une correspondance existe entre l’URL de l’image et le chemin du fichier local : get_paths_from_hotlinked_urls()

comment puis-je :

  1. créer une pièce jointe dans rails pour chacune de ces images et
  2. les ajouter correctement à la publication ?
image_host_domain = 'foo-host.com'

hotlink_posts = Post.where('cooked ~ ?', image_host_domain)
puts "trouvé #{hotlink_posts.length} publications avec des images hotlinkées..."

hotlink_posts.each do |p|
  # obtenir toutes les URL dans la publication contenant 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) 'télécharger' local_paths[i] en tant que pièce jointe
    #                et l'associer correctement à la publication

    # ***** TODO : 2) remplacer le hotlink par la pièce jointe
    # new_raw = new_raw...
  end

  p.update(raw: new_raw)
end

désolé pour la publication à faible effort. je me sens juste un peu stressé aujourd’hui, lol
quelqu’un peut-il m’indiquer la bonne direction ? une solution complète n’est pas requise si c’est trop compliqué. merci

Vous pouvez consulter les scripts d’importation pour des exemples sur la façon de télécharger des fichiers et d’insérer le code HTML pour ces téléchargements.