paperclipでweb上の動画を保存する方法
まずは下記をGemfileに記述し、bundle installを実行してください
Gemfile
gem 'paperclip'
$ bundle install
###Movieモデルを作成します
$ rails g model movie
migrationファイルは下記のように記述
yyyymmddhhmmss_create_movies.rb
class CreateMovies < ActiveRecord::Migration
def change
create_table :movies do |t|
t.attachment :videofile
t.timestamps null: false
end
end
end
attachmentは、paperclipで定義されており、ファイル情報を保持するために複数カラムを追加してくれます。
###migrationを実行
$ rake db:migrate
モデルは下記のように記述
movie.rb
class Movie < ActiveRecord::Base
has_attached_file :videofile,
path: "#{Rails.root}/public/system/:class/:id.:extension",
url: "/system/:class/:id.:extension"
validates_attachment_content_type :videofile, content_type: ["video/mp4"]
end
validates_attachment_content_typeは今回mp4を対象にしています。
###保存処理を実行する際の記述
movie_controller.rb
def save_movie(url)
movie = Movie.new
# web上から動画を取得
open(url, 'User-Agent' => 'Your User Agent') do |videofile|
movie.videofile = videofile
end
movie.save!
end
openで指定したurlの動画を取得します。
エラー処理などを一切省いていますが、これでweb上から動画を取得して保存できます。
###保存した動画を呼び出すには、viewで下記を記述してください。
movie.html.er
<div class="movie">
<video autoplay loop width="420" height="420">
<source src="<%= @movie.videofile %>">
<p>動画を再生するにはvideoタグをサポートしたブラウザが必要です。</p>
</video>
</div>
以上で完了です。