`

使用Rails插件Paperclip上传视频到亚马逊 S3服务

阅读更多
云服务里亚马逊的S3 和 EC2比较常用的,这里是介绍一个上传插件和S3一起使用的例子。

创建model
#video.rb
class Video < ActiveRecord::Base
  
  # Paperclip
  # http://www.thoughtbot.com/projects/paperclip
  has_attached_file :video, 
    :storage => :s3,
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
    :path => ":attachment/:id/:style/:basename.:extension",
    :bucket => 'yourbucketname' 

  # Paperclip Validations
  validates_attachment_presence :video
  validates_attachment_content_type :video, :content_type => ['application/x-shockwave-flash', 'application/x-shockwave-flash', 'application/flv', 'video/x-flv']
end

配置S3相关的配置

#config/s3.yml
access_key_id: YOURSECRETACCESSID
secret_access_key: YOUR-secRE/TACCe\ssKEy


添加插件
Rails::Initializer.run do |config|
  ...  
  config.gem 'right_aws', :version => '1.9.0'
  ...
end


执行
sudo rake gems:install 
sudo rake gems:unpack


Controller和view会如下:
class VideosController < ApplicationController
  
  def index
    @videos = Video.find :all
  end

  def new
    @video = Video.new
  end

  def create
    @video = Video.new(params[:video])
    if @video.save
      flash[:notice] = 'Video has been uploaded'
      redirect_to :action => 'index'
    else
      render :action => 'new'
    end
  end

  def show
    @video = Video.find(params[:id])
  end
  
end


# index view
<h2>Videos (<%= link_to 'Create new', new_video_path %>)</h2>

<ul>
<% for video in @videos %>
	<li><%= video.video_file_name %> <%= video.video.url %> <%= link_to 'view', video_path(video) %></li>
<% end %>
</ul>

# new view
<% form_for(@video, :html => {:multipart => true, :class => 'styledform' }) do |f| %>
	<%= f.error_messages %>
	<p>
		<%= f.label :video %><br />
		<%= f.file_field :video %>
	</p>
	<p>
	  <%= f.submit %> or <%= link_to 'Cancel', videos_path %>
	</p>
<% end %>

# show view
<div id="player">
  You need to have <%= link_to 'Flash Player', 'http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash' %> installed to display this video
</div>

<script type="text/javascript">
  var so = new SWFObject('/flash/player.swf', 'mpl', '480', '360', '8');
  so.addParam('allowscriptaccess', 'always');
  so.addParam('allowfullscreen', 'true');
  so.addVariable('height', '360');
  so.addVariable('width', '480');
  so.addVariable('file', '<%= @video.video.url %>');
  so.write('player');
</script>


配置flash player显示视频
  1. 下载JW FLV MEDIA PLAYER (mediaplayer.zip
  2. 复制player.swf到public/flash/player.swf
  3. 复制swfobject.js 到 public/javascript/swfobject.js
  4. 修改配置application.html.erb加载swfobject.js


<head>
  <meta http-equiv="content-type" content="text/html;charset=UTF-8" />
  <title><%= SITE_NAME %></title>
  <%= stylesheet_link_tag 'application' %>
	<%= javascript_include_tag :defaults %>
	<%= javascript_include_tag 'swfobject' %>
</head>


这样你就可以在http://localhost:3000/videos进行上传操作了


关于开发环境和生产环境

通过在配置yml来区分开发和生产环境往往是不错的办法
当然,这里有一个前提,就是有一个settings.yml用来加载load_config.rb file
设置如下:

 APP_CONFIG = YAML.load_file(“#{RAILS_ROOT}/config/settings.yml”)[RAILS_ENV].symbolize_keys



#In config/settings.yml
development: &non_production_settings
  site_url: http://localhost:3000
  site_name: Site
  admin_email: youremail@domain.com
  bucket: yourappdevelopment
  
test:
  <<: *non_production_settings
  
production:
  site_url: http://domain.com
  site_name: Site
  admin_email: app@domain.com
  bucket: yourappproduction 


#In video.rb
class Video < ActiveRecord::Base
  
  # Paperclip
  # http://www.thoughtbot.com/projects/paperclip
  has_attached_file :video,
    :storage => :s3,
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
    :path => ":attachment/:id/:style/:basename.:extension",
    :bucket => APP_CONFIG[:bucket]
end





出处
分享到:
评论
1 楼 liu_liang_ 2010-09-01  
#In video.rb
class Video < ActiveRecord::Base
  
  # Paperclip
  # http://www.thoughtbot.com/projects/paperclip
  has_attached_file :video,
    :storage => :s3,
    :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
    :path => ":attachment/:id/:style/:basename.:extension",
    :bucket => APP_CONFIG[:bucket]
end

.....

相关推荐

    rails上传文件_paperclip

    Paperclip支持多种存储方式,包括本地文件系统、Amazon S3、Rackspace Cloud Files等。 2. **转换和处理** 你可以定义不同的样式(styles)对上传的文件进行转换,如缩略图生成。 3. **内容类型验证** ...

    使用Rails上传和转换视频

    ActiveStorage直接与数据库交互,方便管理和存储文件,同时支持通过第三方服务如Amazon S3、Google Cloud Storage或Azure Blob Storage进行存储。 要使用ActiveStorage,首先在Gemfile中添加以下行: ```ruby gem '...

    Rails的自动完成分页插件

    在Rails应用中处理文件上传,常见的插件有Paperclip、Carrierwave或ActiveStorage(自Rails 5.2起内置)。这些插件提供了处理文件上传、存储、版本控制和删除的功能。它们可以将文件存储在本地磁盘、云服务如Amazon...

    rails 文件上传

    它与ActiveRecord紧密集成,支持直接关联模型,同时支持多种云存储服务(如Amazon S3、Google Cloud Storage和Azure Blob Storage)。 - **附件关联**: 通过`has_one_attached`或`has_many_attached`方法,可以将...

    学习Ruby on Rails进行Web开发(英文版)

    书中涵盖了Rails的MVC架构、Gems的使用、Bootstrap的集成、用户认证、数据库操作等重要知识点,同时还介绍了如何使用Paperclip上传图片、使用Amazon S3存储图片以及如何对网站进行样式和功能的优化

    rails 多图上传.txt

    在实现Rails应用中的多图上传功能时,通常需要借助于特定的插件或Gem来简化开发流程并增强功能。以下两个工具是必不可少的: 1. **Paperclip(Gem)** - **用途**:用于后台文件处理,是一款非常强大的工具,支持...

    升级版本后Rails的文件上传

    Rails提供了多种处理文件上传的方法,包括直接存储到本地文件系统、使用云存储服务(如Amazon S3)以及第三方库如Paperclip、Carrierwave或ActiveStorage等。在升级Rails版本后,我们需要关注以下几个关键知识点: ...

    Ruby-CarrierWaveRubyWeb框架更优雅的解决方案文件上传

    在Ruby on Rails中,文件上传通常是一个棘手的问题,因为它涉及到临时文件的处理、数据库记录的更新以及最终文件的存储位置。CarrierWave简化了这一过程,允许开发者通过简单的API来管理这些细节。它支持多种存储...

    ruby上传文件

    6. **Storage策略**:上传的文件可以存储在本地文件系统、云存储服务(如Amazon S3或Google Cloud Storage)或其他第三方服务。Rails提供了一种灵活的存储抽象,称为ActiveStorage,可以方便地切换不同的存储策略。 ...

    paperclip_heroku_aws:这是一个基本的 rails CRUD 应用程序,它演示了thoughtbot 的回形针 gem 与 heroku 和 AWS S3 的集成。 这个应用程序还包括使用 rspec 和 capybara 的单元和集成测试

    挑战和最终结果这篇文章介绍了基本 Rails CRUD 应用程序的构建,并专门解决了以下问题: + 将回形针、heroku、aws s3 和friendly_id 集成到允许图像上传的基本rails CRUD 应用程序中。 + 集成了一个 css 库 jasny-...

    MVPUsedCars.com:自定义 CMS(Ruby on Rails、Amazon S3、Sass、jQuery、CoffeeScript、Bcrypt、Zurb Foundation、Rspec)

    该网站同时具有访问者和管理端。 访问者端通过管理员的仪表板使用数据库中定义的信息。 图像托管使用 Paperclip gem 和 AWS S3。 来自entypo.com CSS 框架的字体图标:使用Sass 编译的Foundation Zurb CSS

    car_hunt:找到您附近的甲虫

    技术: 我使用 Ruby on Rails,使用 ruby​​ gem Devise 进行身份验证,使用 Paperclip 上传照片,使用 Amazon S3 存储照片,使用 ruby​​ gem Geocoder 查找您所在位置附近的甲虫。 项目部署在Heroku上: : 流程...

    Ruby Library QuickRef

    10. **Paperclip**:一个文件上传库,支持多种存储后端,如本地文件系统、Amazon S3等,方便处理用户上传的图片和其他文件。 11. **Devise**:一个灵活的身份认证解决方案,提供了常见的认证策略,如电子邮件验证、...

    ruby

    当涉及到CDN(内容分发网络)存储时,Ruby提供了一些库和工具,如CarrierWave、Paperclip和ActiveStorage,它们能够方便地集成到Rails应用中,用于处理文件上传和管理。CDN是通过在全球各地部署服务器节点,将网站...

    photo_album:欧洲之旅相册

    在Rails中,图片通常会被存储在云服务如Amazon S3或Google Cloud Storage上,以减轻服务器的负载。开发者可能使用了carrierwave或paperclip这样的gem来处理图片上传,它们提供了方便的接口来处理文件上传、缩略图...

    CarrierWave-开源

    它通过定义一系列的上传器(Uploader)类,可以轻松地与不同的存储服务集成,如本地文件系统、Amazon S3、Google Cloud Storage 等。每个上传器都可以定制化处理上传的文件,比如缩略图生成、文件格式转换等。这样,...

    bmrng:bmrng 涂料

    其中大部分是由自动处理所有上传的 Paperclip (amazing Gem) 处理的。 如果来自 S3 的带宽量变为并发布(其服务的最大费用),您可能需要查看如何缓存图像。 回形针 这是一个很棒的插件,可以处理来自客户端的所有...

    image_posting

    3. 图像存储:Rails可以使用多种方式存储图像,如本地文件系统、云存储服务(如Amazon S3)或专门的文件存储服务(如Cloudinary)。每种方法都有其优缺点,比如本地存储易于部署,但可能受服务器空间限制;云存储则...

    safedoc:将您的文档保存到云中

    此外,开发者可能还使用了如Devise进行用户认证,Paperclip或Carrierwave处理文件上传,ActiveStorage集成云存储服务如Amazon S3或Google Cloud Storage,以及RSpec或Minitest作为测试框架。这些技术的组合使用,...

Global site tag (gtag.js) - Google Analytics