【问题标题】:Paperclip for both images and Videos图像和视频的回形针
【发布时间】:2016-01-31 17:16:50
【问题描述】:

在我的应用程序中,我已经有用于上传图片的回形针,但要求发生了变化,以便同时接受图片和视频。图像已在具有belongs_to 关系的模型中定义,称为Attachment。由于视频也将是同一父模型的附件(在我的情况下,文章)我想为图像和视频重用相同的 Attachment 模型。这是个好主意吗?

我attachment.rb的代码是:

class Attachment < ActiveRecord::Base

  belongs_to :article 

  has_attached_file :url, :s3_protocol => :https , 
    styles: { 
      medium: "300x300>", thumb: "100x100>", big: "1200x1200>", normal: "600x600>" 
    }

  validates_attachment_content_type :url, content_type: /\Aimage|\Avideo\/.*\Z/

  validates_attachment :url, content_type: { content_type: ["image/jpeg", "image/gif", "image/png", "video/mp4"] }

end

但事实上,它不会在 S3 上存储视频。我在终端中得到以下信息

Command :: file -b --mime '/var/folders/v_/pf2bsxnj1y37ccd2pjksv7z80000gn/T/f3e2afc957bb9fb2aa3e77e69359c48920160131-13311-pyeez1.mp4'
Command :: identify -format '%wx%h,%[exif:orientation]' '/var/folders/v_/pf2bsxnj1y37ccd2pjksv7z80000gn/T/8dc7385648e2164764b72fda6fd9099a20160131-13311-1l40ccn.mp4[0]' 2>/dev/null
[paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError>
Command :: identify -format '%wx%h,%[exif:orientation]' '/var/folders/v_/pf2bsxnj1y37ccd2pjksv7z80000gn/T/8dc7385648e2164764b72fda6fd9099a20160131-13311-1l40ccn.mp4[0]' 2>/dev/null
[paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError>
Command :: identify -format '%wx%h,%[exif:orientation]' '/var/folders/v_/pf2bsxnj1y37ccd2pjksv7z80000gn/T/8dc7385648e2164764b72fda6fd9099a20160131-13311-1l40ccn.mp4[0]' 2>/dev/null
[paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError>
Command :: identify -format '%wx%h,%[exif:orientation]' '/var/folders/v_/pf2bsxnj1y37ccd2pjksv7z80000gn/T/8dc7385648e2164764b72fda6fd9099a20160131-13311-1l40ccn.mp4[0]' 2>/dev/null
[paperclip] An error was received while processing: #<Paperclip::Errors::NotIdentifiedByImageMagickError: Paperclip::Errors::NotIdentifiedByImageMagickError>
Command :: file -b --mime '/var/folders/v_/pf2bsxnj1y37ccd2pjksv7z80000gn/T/f3e2afc957bb9fb2aa3e77e69359c48920160131-13311-kvb5nr.mp4'

第二个问题是,由于我使用 AngularJS 作为前端,我可以利用 HTML &lt;video&gt; 标签将视频呈现给用户吗?

【问题讨论】:

  • 你是如何对视频进行转码的?

标签: ruby-on-rails angularjs paperclip paperclip-validation


【解决方案1】:

看起来问题是ImageMagick 正在尝试transcode 视频,但它不能。

在Paperclip 中处理视频转码的方法是使用paperclip-av-transcoder gem(以前的paperclip-ffmpeg)。我只有后者的经验:

#app/models/attachment.rb
class Attachment < ActiveRecord::Base
    has_attached_file :url, :s3_protocol => :https , 
       styles:  lambda { |a| a.instance.is_image? ?  medium: "300x300>", thumb: "100x100>", big: "1200x1200>", normal: "600x600>" } : {:thumb => { :geometry => "100x100#", :format => 'jpg', :time => 10}, :medium => { :geometry => "300x300#", :format => 'jpg', :time => 10}}}, processors: [:transcoder]

    validates_attachment :url,
        content_type: ['video/mp4'],
        message:      "Sorry, right now we only support MP4 video",
        if:           :is_video?

    validates_attachment :url,
        content_type: ['image/png', 'image/jpeg', 'image/jpg', 'image/gif'],
        message:      "Different error message",
        if:           :is_image?

  private

  def is_video?
    url.instance.attachment_content_type =~ %r(video)
  end

  def is_image?
    url.instance.attachment_content_type =~ %r(image)
  end
end

Our old code & ref

【讨论】:

  • 上面的代码有两个问题。首先是medium: "300x300&gt;"之前应该有一个{来标记哈希的开始。第二个是processors: [:transcoder] 标志将在所有上传的文件上运行转码器,而不仅仅是视频,所以当你发送图像时 ffmpeg 会失败。
猜你喜欢
  • 2011-11-01
  • 2013-10-13
  • 2016-11-19
  • 2013-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多