发布于 2016-02-03 12:13:27 | 186 次阅读 | 评论: 0 | 来源: 网友投递
Ruby on Rails 开源网络应用框架
Ruby on Rails 是一个用于开发数据库驱动的网络应用程序的完整框架。Rails基于MVC(模型- 视图- 控制器)设计模式。从视图中的Ajax应用,到控制器中的访问请求和反馈,到封装数据库的模型,Rails 为你提供一个纯Ruby的开发环境。发布网站时,你只需要一个数据库和一个网络服务器即可。
今天讲解一下rails的图片上传,就是最平常的上传图片 这里的rails版本2.3.5
首先新建一个write_pic model内容如下:
class WritePicrequire "RMagick"require "uuid"def self.write(pic_data,ori_name,resize = nil,file_type = "jpg",tag=false)#File.delete("c:/programData/ruby-uuid") if RAILS_GEM_VERSION == '2.1.2'uuid = ori_name || "#{UUID.new.generate}.#{file_type}"i = Magick::Image.from_blob(pic_data).firstif resizep=resize[:width].to_i*1.00 /i.columnsi.resize!(resize[:width],resize[:height]|| i.rows*p)endwh=0width = i.columnsheight = i.rowsif width > heightwh =1endi.write("#{RAILS_ROOT}/public/images/user_pic/#{uuid}")if tagreturn wh,uuidelsereturn uuidendenddef self.get_pic(url)uuid = "#{UUID.new.generate}.#{file_type}"img_orig1 = Magick::Image.read(url).firstimage1 = img_orig1.resize_to_fit(300,300)image1.write("#{RAILS_ROOT}/public/images/weibo_pic/#{uuid}")return uuidendend
上传 图片是用的插件所以最上面加载了插件。
调用write_pic 这个model的model文件写法如下
class Theme < ActiveRecord::Baserequire "RMagick"require "uuid"def _image=(picture_field)if picture_field != ""self.image = WritePic.write(picture_field.read,self.image,nil)endenddef _imageself.imageenddef suoluetu=(picture_field)if picture_field != ""self.thumbnail = WritePic.write(picture_field.read,self.thumbnail,nil,"png")endenddef suoluetuself.thumbnailendend
controller里面不用在乎太多,直接上view
<h1>New theme</h1><% form_for(@theme,:html=>{:multipart=>'true'}) do |f|%><%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<p>
<%= f.label :color %><br />
<%= f.text_field :color %>
</p>
<p>
<%= f.label :lastcolor %><br />
<%= f.text_field :lastcolor %>
</p>
<p>
<%= f.label :image %><br />
<%= f.file_field :_image %>
</p>
<p>
<%= f.label :thumbnail %><br />
<%= f.file_field :suoluetu %>
</p>
<p>
<%= f.submit "Create" %>
</p>
<% end %>
<%= link_to 'Back', themes_path %>