一括操作ヘルプ:ホットリンクされた画像をローカル画像ファイルに置き換える

シナリオ:

  • 無料の画像ホスティングサービス(例:「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|
  # image_host_domain を含む投稿内のすべてのURLを取得
  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