gpt4 book ai didi

ruby-on-rails - rails 和回形针 : Handling uploads for multiple file types (Video and Images)

转载 作者:行者123 更新时间:2023-12-04 02:20:45 25 4
gpt4 key购买 nike

我正在学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com