rails上传图片代码实例
今天讲解一下rails的图片上传,就是最平常的上传图片这里的rails版本2.3.5
首先新建一个write_picmodel内容如下:
classWritePic require"RMagick" require"uuid" defself.write(pic_data,ori_name,resize=nil,file_type="jpg",tag=false) #File.delete("c:/programData/ruby-uuid")ifRAILS_GEM_VERSION=='2.1.2' uuid=ori_name||"#{UUID.new.generate}.#{file_type}" i=Magick::Image.from_blob(pic_data).first ifresize p=resize[:width].to_i*1.00/i.columns i.resize!(resize[:width],resize[:height]||i.rows*p) end wh=0 width=i.columns height=i.rows ifwidth>height wh=1 end i.write("#{RAILS_ROOT}/public/images/user_pic/#{uuid}") iftag returnwh,uuid else returnuuid end end defself.get_pic(url) uuid="#{UUID.new.generate}.#{file_type}" img_orig1=Magick::Image.read(url).first image1=img_orig1.resize_to_fit(300,300) image1.write("#{RAILS_ROOT}/public/images/weibo_pic/#{uuid}") returnuuid end end
上传图片是用的插件所以最上面加载了插件。
调用write_pic这个model的model文件写法如下
classTheme<ActiveRecord::Base require"RMagick" require"uuid" def_image=(picture_field) ifpicture_field!="" self.image=WritePic.write(picture_field.read,self.image,nil) end end def_image self.image end defsuoluetu=(picture_field) ifpicture_field!="" self.thumbnail=WritePic.write(picture_field.read,self.thumbnail,nil,"png") end end defsuoluetu self.thumbnail end end
controller里面不用在乎太多,直接上view
<h1>Newtheme</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%>