ruby-on-rails – 如何使用paperclip-Rails加载和验证视频
发布时间:2020-12-17 02:48:37 所属栏目:百科 来源:网络整理
导读:请帮忙解决问题. 使用回形针我组织了上传图片.有用. 现在我想组织一个视频上传.我改变了这个模型: 模型: class Video ActiveRecord::Base validates :title,presence: true validates :video,presence: true belongs_to :user has_attached_file :video,:s
请帮忙解决问题.
使用回形针我组织了上传图片.有用. 现在我想组织一个视频上传.我改变了这个模型: class Video < ActiveRecord::Base validates :title,presence: true validates :video,presence: true belongs_to :user has_attached_file :video,:styles => { :medium => "300x300>",:thumb => "100x100>" },:default_url => "/images/:style/missing.png" validates_attachment_content_type :video,:content_type => /Avideo/.*Z/ validates_attachment_file_name :video,:matches => [/3gpZ/,/mp4Z/,/flvZ/] validate :file_size_validation,:if => "video?" def file_size_validation errors[:video] << "should be less than 2MB" if video.size.to_i > 30.megabytes end end 视频控制器: def create @video = Video.new(video_params) if @video.save @video.update_attributes(user: current_user) flash[:success] = :video_created redirect_to @video else flash.now[:error] = :user_not_created render 'new' end end 形成: <%= form_for(@video) do |f| %> <%= f.text_field :title %> <%= f.file_field :video %> <%= f.submit %> <% end %> 尝试上传视频后,我得到控制台以下错误消息: Started POST "/videos" for 127.0.0.1 at 2015-07-23 14:17:32 +0300 Processing by VideosController#create as HTML Parameters: {"utf8"=>"?","authenticity_token"=>"RF3w8PzZ9LZ4pdqRPqRvHMQ+nYDL4om0YHAMlzTm8tf3iFmVmKxXSYKap3C0ogEnOkifm9i01oXs/rTX9zmtPA==","video"=>{"title"=>"tty","video"=>#<ActionDispatch::Http::UploadedFile:0x007f6624f10770 @tempfile=#<Tempfile:/tmp/RackMultipart20150723-13428-u7s8i8.flv>,@original_filename="mmm.flv",@content_type="video/x-flv",@headers="Content-Disposition: form-data; name="video"; filename="mmm.flv"rnContent-Type: video/x-flvrn">},"commit"=>"Create Video"} User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 ORDER BY "users"."id" ASC LIMIT 1 [["id",8]] Command :: file -b --mime '/tmp/c4efd5020cb49b9d3257ffa0fbccc0ae20150723-13428-6gn39i.flv' Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/c4efd5020cb49b9d3257ffa0fbccc0ae20150723-13428-1eailfd.flv[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> Command :: identify -format '%wx%h,%[exif:orientation]' '/tmp/c4efd5020cb49b9d3257ffa0fbccc0ae20150723-13428-1eailfd.flv[0]' 2>/dev/null [paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError> (0.2ms) BEGIN Command :: file -b --mime '/tmp/c4efd5020cb49b9d3257ffa0fbccc0ae20150723-13428-khstwa.flv' (0.2ms) ROLLBACK 在屏幕上显示以下错误消息:
其中imageMagik安装在我的系统中: sudo apt-get install imagemagick D b: create_table "videos",force: :cascade do |t| t.datetime "created_at",null: false t.datetime "updated_at",null: false t.string "title" t.integer "user_id" t.string "video_file_size" t.string "video_updated_at" t.string "video_file_name" t.string "video_content_type" end 解决方法
使用回形针和视频处理图像是不同的.虽然常见的是它会帮助您将上传的数据发送到服务器,但您需要使用某些处理器来处理它.就像您使用ImageMagick进行图像一样,您应该使用FFMPEG编码/解码视频.
我将分享我通常用于视频的代码.但在此之前,你必须设置ffmpeg来处理所有格式的视频,就像你为Imagemagick所做的那样. here设置为ffmpeg并且不要忘记在环境文件中使用ffmpeg提供路径 你需要ffmpeg-paperclip来编码/解码视频. video.rb ##using s3 ##convert the video into mp4 and also get screenshot of video at 5 sec ##add your own formats that you want has_attached_file :video,:styles => { :mp4video => { :geometry => '520x390',:format => 'mp4',:convert_options => { :output => { :vcodec => 'libx264',:vpre => 'ipod640',:b => '250k',:bt => '50k',:acodec => 'libfaac',:ab => '56k',:ac => 2 } } },:preview => { :geometry => '300x300>',:format => 'jpg',:time => 5 } },processors: [:ffmpeg],:storage => :s3,:size => { :in => 0..25.megabytes },:s3_permissions => :public_read,:s3_credentials => S3_CREDENTIALS validates_attachment_content_type :video,:content_type => /Avideo/.*Z/ validates_presence_of :video 一旦你保存了视频,你需要使用一些插件来显示视频播放器和你的视频在show action.You可以使用Mediaelement.js(我最喜欢的).下载它,相应地转储到js / css文件中,包含它application.js和application.css. in your show.html.erb ##add video tag to show video <video autobuffer="autobuffer" preload="auto" style="width:100%;height:100%;" controls="controls" width="100%" height="100%" poster="<%= @video.video.url(:preview)%>" > <source src="<%= @video.video.url%>" /> <%if @video.video.expiring_url(:mp4video).present? %> <source type="video/mp4" src="<%= @video.video.url(:mp4video)%>" /> <%end%> </video> ##javascript to handle video player $('video').mediaelementplayer(); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |