Ruby
Rails
Heroku

dropboxから直リンク生成すればherokuに無料で画像アップできるんじゃね?

茶番

学生の強い味方 heroku

皆さんご存知herokuは今やPaaSの代表格ですね。
個人的にはrailsで作ったWebアプリを無料で公開できて非常に助かっています。

が、

無料で全ての機能を満足に使えるわけないですよね。

そう、アプリ内からアップロードしたファイルはサーバーの再起動と共に消えてしまいます。
誰もが一度は通る道だと思ってます。

そのため、プロフィール用にユーザーがアップした画像やら、なんやらが数時間後には消えてしまうんです...
ちくしょう!!なんてこった!!!

学生の強い味方 dropbox

話を一度変えましょう、
皆さんご存知dropboxは今やクラウドストレージの代表格ですね。
個人的には大学の資料共有など非常に助かっています。

ん?

dropboxから直リンクを生成してherokuにあげればいいんじゃね...?

herokudropboxが両方そなわり最強に見える

と、言うわけで本題です。
本記事ではdropboxにアップロードした画像(ファイル)をherokuで扱う方法について説明します。

dropboxから直リンクを生成する

まず直リンクの生成です。
できるのか?って方も多いかと思いますが、実はできちゃうんです。

dropboxから欲しいファイルの共有リンクを作成し、
URLのwww.dropbox.comdl.dropboxusercontent.comに変え、?dl=0を消すだけ。

ね、簡単でしょう?

サンプルコード

そして、この作業をrubyで書くとこうなります。

url_generator.rb
url = 'https://www.dropbox.com/s/hogehoge/hogehoge12341234.jpg?dl=0'
parts = url.split('/')
if parts.length > 5
parts[2] = 'dl.dropboxusercontent.com'
id = parts[-1].split('?')

g_url = ''
(parts.length - 1).times do |i|
    g_url += parts[i] + '/'
end
g_url += id[0]
puts g_url

我ながら汚コードなので改善案があればアドバイスお願い致します...

追記
taram様より提案頂いた上位互換のコードがこちらになります。

url_generator.rb
url = 'https://www.dropbox.com/s/hogehoge/hogehoge12341234.jpg?dl=0'
puts url.sub(/www.dropbox.com/, "dl.dropboxusercontent.com").sub(/\?dl=0/, "")

stringに置換のメソッドあったんですね、そりゃありますよね勉強不足でした...
ありがとうございました!

herokuで利用する

直リンクを生成できたので、早速利用していきましょう。

使用方法は簡単です。
例えばユーザーのプロフィール画像として扱いたければ、Userモデルにimage_url:stringのカラムを追加し、共有リンクを貼り付けてもらうだけ!

あとは<img src="<%= @user.image_url %>">とでも書けば表示されます。





...えぇ、おっしゃりたいことはわかります。

そうですね、あくまで「無料」で「練習用もしくは身内用」に Webアプリを作る時くらいでしか有用性はありません。

だってわざわざ外部サイトにアップロードして共有リンク生成して貼り付けなんて面倒ですもん!

終わりに

筆者自身は身内用に作ったWebアプリでこの方法を利用しています。
確かに多少手間はありますが、アップした画像が消えてしまうより何倍も良いですし、特定少数での利用ですので理解して使ってくれていますので不満の声もありません。

身内利用であれば非常に有用なテクニックですので、是非ご活用ください!

※利用規約等に問題はないと思いますが、万が一問題があれば記事を加筆修正し対応致します。