paperclip真的是个很好的插件,使得简单的图片上传,如用户头像上传变得非常简单,下面是我在开发的过程中的使用笔记,从安装开始,
RMgick主要是对Imagemagick的一个包装插件安装方法见我的另一篇blogruby on rails 3 RMagick 在 windows 上的安装
下面是paperclip的安装
……
大家在开发中遇到的几个问题
1 如何修改文件名
2 我有图片服务器,或者S3这样的云计算存储服务,我如何修改路径和服务,上传到别的地方,以及浏览的地址变成相应的地址
3 文件夹的目录如何改成日期层次结构的
4 切割图片
5 多文件上传
6 我想上传的时候使用ajax的进度条效果怎么办
paperclip真的是个很好的插件,使得简单的图片上传,如用户头像上传变得非常简单,下面是我在开发的过程中的使用笔记,从安装开始,
RMgick主要是对Imagemagick的一个包装插件安装方法见我的另一篇blogruby on rails 3 RMagick 在 windows 上的安装
下面是paperclip的安装
方法一
在gemfiles里添加
gem 'paperclip', :git => 'git://github.com/thoughtbot/paperclip.git',
:branch => 'rails3'
然后
[ccn lang="bush" tab_size="4" theme="blackboard" width="800" ]
bundle install
[/ccn]
这个在so上好多人说 not work所以我没有采纳.
我使用的是
方法二
[ccn lang="ruby" tab_size="4" theme="blackboard" width="800" ]
rails plugin install git://github.com/thoughtbot/paperclip.git
[/ccn]
使用方法
在你想要的有图片的模型里添加has_attached_file 属性
[ccn lang="ruby" tab_size="4" theme="blackboard" width="800" ]
class DlThread < ActiveRecord::Base
belongs_to :user,:class_name => "User"
belongs_to :dl_type,:class_name => "DlType"
has_attached_file :photo, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
[/ccn]
然后执行下面的代码来产生一个migrate
[ccn lang="bash" tab_size="4" theme="blackboard" width="800" ]
rails g migration add_photo_to_dl_threads photo_file_name:string photo_content_type:string photo_file_size:integer
[/ccn]
产生的代码如下
[ccn lang="ruby" tab_size="4" theme="blackboard" width="800" ]
class AddPhotoToDlThreads < ActiveRecord::Migration
def self.up
add_column :dl_threads, :photo_file_name, :string
add_column :dl_threads, :photo_content_type, :string
add_column :dl_threads, :photo_file_size, :integer
end
def self.down
remove_column :dl_threads, :photo_file_size
remove_column :dl_threads, :photo_content_type
remove_column :dl_threads, :photo_file_name
end
end
[/ccn]
然后执行
[ccn lang="bash" tab_size="4" theme="blackboard" width="800" ]
rake db:migrate
[/ccn]
这个表就会增加3个字段photo_file_name, photo_content_type, photo_file_name来记录图片的信息
然后修改你的form
[ccn lang="ruby" tab_size="4" theme="blackboard" width="800" ]
<%= form_for([:downloads, @dl_thread], :html => { :multipart => true } ) do |f| %>
<%= f.file_field :photo %>
.......
[/ccn]
修改show的视图,显示这个图片将会变得非常简单
[ccn lang="ruby" tab_size="4" theme="blackboard" width="800" ]
<%= image_tag @dl_thread.photo.url(:thumb) %>
[/ccn]
你会发现在存放图片的目录下,默认在public\system\photos\3\original\abstract_colour_background_Bokeh_Right.jpg这样的路径下
paperclip基本的使用方法就是这样的,视频资源也有http://railscasts.com/episodes/134-paperclip
如果有切割的必要,看这个视频http://railscasts.com/episodes/182-cropping-images
如果要自定义路径
参考http://liuzihua.org/past/2011/4/15/railspaperclip/
源代码中
\vendor\plugins\paperclip\lib\paperclip\attachment.rb"(12,54):
这里有配置
大家在开发中遇到的几个问题
1 如何修改文件名
2 我有图片服务器,或者S3这样的云计算存储服务,我如何修改路径和服务,上传到别的地方,以及浏览的地址变成相应的地址
3 文件夹的目录如何改成日期层次结构的
4 切割图片
5 多文件上传
6 我想上传的时候使用ajax的进度条效果怎么办
这些问题,我在后面的文章中会提到,今天累了就不写了
参考资料
http://railscasts.com/episodes/134-paperclip
http://doganberktas.com/2010/09/12/paperclip-on-rails-3-damn-easy/
http://patshaughnessy.net/2010/5/23/how-to-install-paperclip-in-a-rails-3-app
https://github.com/thoughtbot/paperclip
http://stackoverflow.com/questions/2341216/rails3-and-paperclip
Pingback:ruby on rails 3 RMgick + paperclip + Jcrop 实现 图片上传 切割