在s3上设置mp4文件的内容类型

chu*_*k w 6 ruby-on-rails amazon-s3 paperclip

我在paperclip gem和s3存储的帮助下将用户上传的视频添加到我的RoRs站点.由于某种原因,我无法弄清楚,每当用户上传mp4文件时,s3都会为该文件设置内容类型application/mp4而不是video/mp4.

请注意,我在初始化文件中注册了mp4 mime类型:

Mime::Type.lookup_by_extension('mp4').to_s => "video/mp4"

这是我的Post模型的相关部分:

  has_attached_file :video, 
                :storage => :s3,
                :s3_credentials => "#{Rails.root.to_s}/config/s3.yml",
                :path => "/video/:id/:filename"

  validates_attachment_content_type :video,
     :content_type => ['video/mp4'],
     :message => "Sorry, this site currently only supports MP4 video"
Run Code Online (Sandbox Code Playgroud)

我的回形针和/或s3设置中缺少什么.

####更新#####

由于某些原因,我不知道Rails,我的mp4包含文件的默认mime类型如下:

    MIME::Types.type_for("my_video.mp4").to_s
 => "[application/mp4, audio/mp4, video/mp4, video/vnd.objectvideo]" 
Run Code Online (Sandbox Code Playgroud)

因此,当回形针将mp4文件发送到s3时,它似乎将文件的mime类型识别为第一个默认值"application/mp4".这就是为什么s3将文件标识为具有"application/mp4"的内容类型的原因.因为我想启用这些mp4文件的流媒体,我需要使用回形针将文件识别为具有mime类型的"video/mp4".

有没有办法修改回形针(可能在before_post_process过滤器中)以允许这样做,或者有没有办法通过init文件修改rails以将mp4文件识别为"video/mp4".如果我能做到,哪种方式最好.

谢谢你的帮助

chu*_*k w 7

事实证明我需要在模型中设置默认的s3标题content_type.这对我来说不是最好的解决方案,因为在某些时候我可能会开始允许除mp4以外的视频容器.但它让我继续讨论下一个问题.

  has_attached_file :video, 
                :storage => :s3,
                :s3_credentials => "#{Rails.root.to_s}/config/s3.yml",
                :path => "/video/:id/:filename",
                :s3_headers =>  { "Content-Type" => "video/mp4" }
Run Code Online (Sandbox Code Playgroud)