- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Rails,过去两天我一直在研究如何使用回形针通过同一模型上传视频和图像。我觉得我已经用尽了所有资源来寻找答案,但没有找到任何似乎可以帮助我将正确样式应用于正确文件类型的东西。
这是我的图像模型(注意:我从一个图像模型和一个头像属性开始。我正在扩展它的用途,所以请不要混淆它的命名方式)
class Image < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
has_attached_file :avatar,
if: :is_image_type?, styles: {:large => "750x750>", :medium => "300x300#", :thumb => "100x100#" }, :default_url => "no_image.png",
if: :is_video_type?, :styles => {
:medium => { :geometry => "640x480", :format => 'flv' },
:thumb => { :geometry => "100x100#", :format => 'jpg', :time => 10 }
}, :processors => [:transcoder]
validates_attachment_content_type :avatar,
:content_type => ['image/png', 'image/jpeg', 'image/jpg', 'image/gif', "video/mp4", "video/m4v", "video/mpeg"]
def is_image_type?
content_type = ['image/png', 'image/jpeg', 'image/jpg', 'image/gif']
# /\Aimage\/.*\Z/
end
def is_video_type?
content_type = ["video/mp4", "video/m4v", "video/mpeg"]
end
end
本质上,我正在尝试弄清楚如何让样式适用于其适当的文件类型。如果它是一个视频,我希望它被设置为视频,如果它是一个图像,作为一个图像。
内容验证工作正常,一旦工作正常,我将对其进行更改以包括所有图像格式和所有视频格式。
目标总而言之,我的目标是能够拥有一个文件上传字段,用户可以在其中上传多个文件和多种文件类型,包括图像、视频、音频、pdf 和其他文件类型。
然后我将使用“content_type”字段来提取我想要在网站的不同区域显示的文件类型。
如果一种模型的这种方法似乎不够充分,请指出一种更好的方法。
我正在使用“paperclip-av-transcoder”gem 来处理视频。
同样,我正在学习 Rails,所以如果有什么不清楚的地方,我很乐意澄清和修改。
非常感谢。
最佳答案
所以我终于想通了这个问题。我的代码(基本上)是正确的,但我将在此处传递最终代码。
问题是它没有正确处理,因为我的机器上没有安装编码器。
因此对于任何想要上传视频并且像我这样的新手来说,您需要安装 FFmpeg 之类的东西来处理上传的视频。
我在本教程中使用了自制软件,它非常简单:https://trac.ffmpeg.org/wiki/CompilationGuide/MacOSX
这是我的代码的最终版本:
class Image < ActiveRecord::Base
belongs_to :imageable, polymorphic: true
# Apply styling appropriate for this file
has_attached_file :avatar, styles: lambda { |a| a.instance.check_file_type}, :default_url => "no_image.png"
validates_attachment_content_type :avatar, :content_type => /.*/
# The path of the image that will be shown while the file is loading
def processing_image_path(image_name)
"/assets/" + Rails.application.assets.find_asset(image_name).digest_path
end
process_in_background :avatar, processing_image_url: lambda { |a| a.instance.processing_image_path("dad.jpg")}
# IMPORTANT! The ffmpeg library has to added to the server machine.
# It can be uploaded from the official website https://www.ffmpeg.org/
def check_file_type
if is_image_type?
{:large => "750x750>", :medium => "300x300#", :thumb => "100x100#" }
elsif is_video_type?
{
:medium => { :geometry => "300x300#", :format => 'jpg'},
:video => {:geometry => "640x360#", :format => 'mp4', :processors => [:transcoder]}
}
elsif is_audio_type?
{
:audio => {
:format => "mp3", :processors => [:transcoder]
}
}
# avatar_file_name = self.basename(:avatar_file_name, self.extname(:avatar_file_name))
else
{}
end
end
# Method returns true if file's content type contains word 'image', overwise false
def is_image_type?
avatar_content_type =~ %r(image)
end
# Method returns true if file's content type contains word 'video', overwise false
def is_video_type?
avatar_content_type =~ %r(video)
end
# Method returns true if file's content type contains word 'audio', overwise false
def is_audio_type?
avatar_content_type =~ /\Aaudio\/.*\Z/
end
end
我仍在添加不同的数据类型,并在我完成后特别允许这些数据类型进行验证,但这应该向您展示我所做的,您可以在此基础上进行构建。
希望这对其他人有帮助,而不仅仅是我!
关于ruby-on-rails - rails 和回形针 : Handling uploads for multiple file types (Video and Images),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979257/
你能解释一下两者之间的区别吗 和 ? 最佳答案 通过使用 .您可以添加多个源元素。多个源元素可以链接到不同的视频文件。浏览器将使用第一个识别的格式。
我正在使用 ImagePickerController 处理 iPhone 视频捕获。我已经设置了图像选择器 Controller 的属性。我用它来将视频的最大长度设置为 60 秒。 imagePic
我正在制作一个进行基本视频处理的应用程序。我成功地合并到视频(视频上的视频)。 如何将左上角的小视频裁剪成一个圆圈? 最佳答案 如果您想导出该视频,您需要: 创建 CALayer,它将成为您的视频层的
我正在使用 SVT-AV1 和 FFMPEG 将视频编码为 AV1 视频和 opus 音频编解码器(.webm),它工作正常,除了视频搜索不起作用(非常糟糕)。当我寻找时,CPU 使用率会上升,并且需
在 Adobe Muse 中使用 VIDEO.JS 目前我已将海报图像配置为在视频开头显示, 当视频结束时,我希望海报图像重新出现。谢谢你的帮助! 最佳答案 将来最好的方法是通过 css。我只是a
我目前正在尝试从单张图片 (1980*1024) 生成视频 这是我的命令: ffmpeg -threads 8 -r 1 -loop 1 -i "C:\Library\Titling\__Resour
我想从 HTML 获取框架 javascript 中的组件,以便我可以处理它们然后输出到 Canvas 最佳答案 看看这个代码笔:Demo var videoId = 'video'; va
我已经使用 video.js 一段时间了,正在寻找响应式解决方案。我看到 4.6 声称是这样,但无法开始工作。我在文档中找不到任何关于使其响应的内容。我基本上只需要它保持在容器的 100% 并保持其纵
我正在寻找任何用于设置视频流服务器的现代资源。最好是开源解决方案。 我对此的搜索导致了很多死胡同。我也确实需要构建自己的服务而不是支付服务费用。 最佳答案 要设置您自己的视频流服务器,您应该从以下组件
如何在处理流媒体或网络视频时拦截“无法播放视频”对话框? 我尝试了以下操作并能够显示我的自定义错误消息。但最重要的是,我仍然收到 Android MediaPlayer 错误对话框“无法播放视频”。
它使我的视频居中并将控件放置在 div 底部但视频流出。在 css 样式表中,css 似乎无法识别。样式表中的 cos 颜色为黑色。我使用 Chrome 。 div.video_div{ width:
在 HTML5 video 元素中,您定义 type 属性的值始终以 video 开头。从元素是视频不是已经很明显,它是视频类型吗?为什么需要这样的视频:type="video/mp4",不应该只是t
我想通过 jQuery 或 Javascript 检测 html5 标签内的特定视频何时已完全加载(我的意思是,下载到浏览器的缓存中)。视频具有 preload = "auto"属性。 我尽我所能做到
HTML5 带来或将带来和 标签等等。自从我听说了他们,读了之后更是如此Why do we have an img element?特别是Jay C. Weber's message back fro
我正在制定一个 Web 应用程序的详细信息,该应用程序涉及顺序加载一长串(非常短的)视频剪辑,一个接一个,用户偶尔会输入建立新的视频剪辑加载方向. 我希望能够让浏览器一次预加载五个视频剪辑。然而,我们
我想知道 HTML5 标签现在支持.avi 格式视频文件的播放。 最佳答案 简短回答:否。改用 WebM 或 Ogg。 This article几乎涵盖了您需要了解的有关 的所有信息元素,包括哪些浏
尽管它似乎处于某种危险之中,但开放视频标准是一个好主意。我看到了一些关于运动跟踪的演示——只是概念验证,但仍然很有趣。现在,我要说的是,如果可以访问用户的网络摄像头,像这样的概念真的会是一个收获……想
我正在尝试使用 php-facebook-sdk 并借助 curl Facebook API 创建广告。 我已经使用 curl 上传了我的视频,它返回了一个 ID。现在,该视频 ID 将用于添加广告,
我正在使用 Video.js在我的网站上显示视频的插件。 我想删除画中画图标。我已经尝试了几个小时,但没有成功。 我做错了什么? 最佳答案 它应该是 data-setup='{"cont
使用 MediaRecorder 从 SurfaceView 录制视频 录音机 recorderProfile = CamcorderProfile.get( CamcorderProfile.QUA
我是一名优秀的程序员,十分优秀!