`
小嗷喏
  • 浏览: 52633 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

Rails 使用 Paperclip 上传图片

阅读更多

转移 http://aikin.me/2014/02/20/rails-paperclip/ 

 

Paperclip是 Rails 的一个上传图片插件,它和ImageMagick联合使用,可以很方便的实现图片上传并切割指定大小的功能,使整个图片上传过程非常简单,还会将上传的图片保存在public文件夹下。

   1.下载paperclip gem包

 (1)在Gemfile中写上

gem 'paperclip'

 

  (2)在终端运行

bundle install

   

    2.使用paperclip

  (1)在终端输入:

rails g paperclip image_news image

   这样就会在原先的 image_news model中增加image属性,同时在app/db/migrate 文件夹下会

   新建xxxxxxx_add_attachment_image_to_image_news.rb 文件内容:

class AddAttachmentImageToImageNews < ActiveRecord::Migration
  def self.up
    change_table :image_news do |t|
      t.attachment :image
    end
  end

  def self.down
    drop_attached_file :image_news, :image
  end

end

 

  (2)再对数据库迁移,终端输入:

rake db:migrate

   

   如果你原先的image_news model 中没有其他属性,那么在schema.rb文件中:

ActiveRecord::Schema.define(version:xxxxxxx) do

  create_table "image_news", force: true do |t|
    t.datetime "created_at"
    t.datetime "updated_at"
    t.string   "image_file_name"
    t.string   "image_content_type"
    t.integer  "image_file_size"
    t.datetime "image_updated_at"
  end

end

 

 (3)接着在image_news.rb文件中写上:

class ImageNews < ActiveRecord::Base
  has_attached_file :image,                                                                          //:styles => { :small => "150x150>"},                
                    :url  => '/images/:id/:style/:basename.:extension',
                    :path => ':rails_root/public/images/:id/:style/:basename.:extension'
  validates_attachment_presence :image
  validates_attachment_size :image, :less_than => 5.megabytes
  validates_attachment_content_type :image, :content_type => %w(image/jpeg image/png)
end

   上面代码,要使用 :styles 就必须要确认是否有装 imageMagick,如果没装就会报错。

   还有 :path :rails_root/public 后面的必须和 :url相同,就像这里的

   'images/:style/:basename.:extension' 

    

:rails_root 
    The path to the Rails application.(当前Rails程序的路径,等同于RAILS_PATH的值。) 
:rails_env 
    The current environment (e.g. development, production)(当前运行环境,如:development,production) 
:class 
    The class name of the model that the attachment is part of, underscored and pluralised for your convenience.(文件拥有者的类名的复数形式,多个单词间以下划线连接。) 
:basename 
    The name of the originally uploaded file without its extension.(上传的文件原始的名字,不带扩展名。) 
:extension 
    The file extension of the originally uploaded file.(上传的文件的扩展名) 
:id 
    The ID of the model that the attachment is part of.(文件拥有者的id) 
:id_partition 
    The same as :id but formatted as a string using ID partitioning.(和:id一样,但结果是用ID partitioning格式化过的。) 
:attachment 
    The name of the attachment attribute (defined in the call to has_attached_file) downcased and pluralised for your enjoyment.(文件作为拥有者的属性的属性名,也就是跟在has_attached_file后面的那个名字,小写、复数形式。) 
:style 
    The current style of the attachment file being processed (e.g. in the ‘discarding an uploaded image‘ example above the :style would be one of ‘original’ or ‘small’) (文件被以某种样式处理的样式名,该选项用于图片处理。)
    

 

   (4) 在controller(controllers/image_upload_controller.rb)里写上:

class ImageUploadController < ApplicationController

  def image_upload_view
    @image_news = ImageNews.new
  end

  def upload
    @image_news = ImageNews.new
    @image_news.image = params[:image_news][:image]
    @image_news.save
    redirect_to(:action => 'image_show_view', :id => @image_news.id)
  end

  def image_show_view
    @image_news = ImageNews.find(params[:id])
  end

end

   

   (5) 在view(views/image_upload_view.html.erb)写上:

<div style="background: #F5F5F5; width: 659px; padding: 50px; margin: 100px auto auto auto">
  <%= form_for @image_news, :url =>{:action => 'upload'}, :html => {:multipart => true} do |f|  %>
      <p>请选择图片:</p>
      <%= f.file_field :image%>
      <%= f.submit '上传' %>
  <% end %>
</div>

 (6)在view/image_show_view.html.erb写上:

<div style="margin: 100px 80px 100px 500px">
 <%= image_tag @image_news.image.url%>
</div>

    

    (7) 安装ImageMagick (Mac OS X 10.8.5) 安装很成功、方便,不过得最先装xcode。

curl -O ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick.tar.gz
tar -zxf ImageMagick.tar.gz
cd ImageMagick-*/
./configure --prefix=/opt/local
make
sudo make install

    也可以用Homebrew安装。   

 

    参考:http://yuan.iteye.com/blog/604174

              http://huacnlee.com/blog/rails-plugin-paperclip-for-image-upload/

              http://railscasts.com/episodes/134-paperclip

              http://elf8848.iteye.com/blog/455675

              

   

 

 

 

 

分享到:
评论

相关推荐

    rails上传文件_paperclip

    在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...

    rails 文件上传

    在Ruby on Rails框架中,文件上传是一个常见的需求,例如用户头像、产品图片或文档的上传。本篇文章将深入探讨Rails中的文件上传机制,并结合给定的“rails 文件上传”主题,提供关于如何在Rails应用中实现文件上传...

    使用Rails上传和转换视频

    在Rails中,最常用的文件上传库是Paperclip和CarrierWave,但现在更推荐使用ActiveStorage,这是Rails 5.2及更高版本内置的一个功能。ActiveStorage直接与数据库交互,方便管理和存储文件,同时支持通过第三方服务如...

    rails 多图上传.txt

    - 使用Paperclip处理上传的文件,包括存储和缩放等操作。 通过上述步骤,即可实现一个完整的Rails多图上传功能。此方案不仅提供了前端用户友好的交互体验,还利用了Paperclip的强大功能来简化后端处理流程。

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

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

    升级版本后Rails的文件上传

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

    paperclip-example:在 Rails 4.0.0 中使用 Paperclip 和 S3 的示例

    在 Rails 4.0.0 上运行带有 AWS S3 演示的 Paperclip 教程这是一个教程和演示,用于获取在 Rails 4.0.0 上运行的带有 AWS S3 上传的 Paperclip。 在本教程中,我们将创建一个简单的站点,可以在其中创建文章并可以将...

    Advanced Rails

    7. **Rails插件与Gem**:Rails社区提供了丰富的插件和Gem,如Devise用于身份验证,Paperclip或Carrierwave处理文件上传,Resque或Sidekiq实现后台任务队列。掌握如何选择和使用这些工具来扩展应用功能。 8. **Rails...

    ruby on rails最新版

    例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...

    ruby on rails 开发环境包(ruby1.8.7,rails2.2.3)

    在Rails 2.2.3时代,社区已经发展出很多插件和 gems(Ruby的扩展库),如Devise用于身份验证,CanCanCan进行授权管理,Paperclip或Carrierwave处理文件上传等。虽然这些可能需要适配老版本,但它们能极大地增强你的...

    ruby on rails 2.3.5 api html版

    10. **插件和Gem**:Rails的生态系统中,Gem是第三方库的主要形式,它们提供了额外的功能,如Devise用于身份验证,CanCanCan用于授权,Paperclip或Carrierwave处理文件上传等。 11. **部署**:了解如何将Rails应用...

    Rails的自动完成分页插件

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

    ruby on rails 3 tutorial.pdf

    例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传等。 此外,本书还会介绍Rails的安全实践,包括防止SQL注入、XSS攻击等常见Web安全问题。你将学习如何使用strong parameters...

    rails-1.0.0

    10. **社区和生态系统**:Rails拥有庞大的开发者社区,产生了许多优秀的第三方Gem库,如Devise(身份验证),Paperclip(文件上传),Pundit(权限控制)等,丰富了Rails的功能。 Rails 1.0.0的发布标志着Web开发...

    ruby on rails在线考试系统

    例如,Devise用于用户认证,Cancancan进行权限控制,Paperclip或Carrierwave处理文件上传等。 8. 安全性:Rails内置了一些安全特性,如CSRF(跨站请求伪造)防护、XSS(跨站脚本攻击)防护以及参数过滤等。在考试...

    Rails入门教程一(翻译).pdf

    此外,Rails提供了丰富的插件和gem(Ruby gem),例如Devise用于身份验证,CanCanCan处理授权,Paperclip或Carrierwave用于文件上传等,这些都能极大地增强应用的功能。 在开发过程中,Rails还提供了TDD(测试驱动...

    Ruby On Rails中文教材(PDF)

    10. **Gem包管理**:Ruby的Gem系统使得安装和管理第三方库变得简单,如Devise用于用户认证,Paperclip或Carrierwave处理文件上传,Bootstrap提供前端UI组件等。 学习Rails的过程中,实践尤为重要。通过完成实际项目...

    ruby on rails社区网站开发源码

    13. **社区插件(Gems)**:Rails的生态系统中有大量高质量的第三方Gem,如Devise(用户认证)、Pundit(授权管理)、Paperclip或Carrierwave(文件上传)等,它们可以极大地扩展Rails的功能。 通过研究这个源码,...

    应用Rails进行敏捷Web开发中文第三版

    6. **插件和gem**:Rails社区有大量的插件和gem可供扩展功能,如Devise用于用户认证,Cancancan用于授权,或者Paperclip和Carrierwave处理文件上传。 7. **Ajax和JavaScript**:Rails 2.2.2支持集成Prototype ...

Global site tag (gtag.js) - Google Analytics