rails 上传图片功能

?

写两个简单的rails 上传图片功能

?

一 rails 插件: ??paperclip-2.4.3.gem

?

? ?1 gem install?paperclip-2.4.3.gem

?

? ?2 ?新建model 表图片字段,

? ? ? ?字段分为三个,假设model 引用字段名:photo ,则三个字段为 ?

? ? ? t.string :photo_file_name ? ? 图片名

? ? ? t.string :photo_content_type ? 图片类型

? ? ? t.string :photo_file_size ? ? 图片大小

? ? ? ?后面字段名不能变

?

? ?3 ?表的model 引用, ??has_attached_file :photo?

?

? ?4 ?页面上,假设 form_for 表单提单

? ? ? ?<%= f.file_field :photo %>

?

? ?5 ?使用图片时

? ? ? ?<%=image_tag ?@organization.photo.url %> ?

?

? OK 了,我是在rails 3 中使用的,插件是将图片的路径为三部分保存,图片存放在 。。\public\system\

? 今天试了一下,也可以上传swf文件,同样的方法

<object id="FlashID" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="690" height="90">              <param name="movie" value="<%=adver_flash.ad.url%>" />              <param name="quality" value="high" />              <param name="wmode" value="opaque" />              <param name="swfversion" value="9.0.45.0" />              <!-- 此 param 标签提示使用 Flash Player 6.0 r65 和更高版本的用户下载最新版本的 Flash Player。如果您不想让用户看到该提示,请将其删除。 -->              <param name="expressinstall" value="<%=adver_flash.ad.url%>" />              <!-- 下一个对象标签用于非 IE 浏览器。所以使用 IECC 将其从 IE 隐藏。 -->              <!--[if !IE]>-->               <object type="application/x-shockwave-flash" data="<%=adver_flash.ad.url%>" width="690" height="90">                <!--<![endif]-->                <param name="quality" value="high" />                <param name="wmode" value="opaque" />                <param name="swfversion" value="9.0.45.0" />                <param name="expressinstall" value="<%=adver_flash.ad.url%>" />                <!-- 浏览器将以下替代内容显示给使用 Flash Player 6.0 和更低版本的用户。 -->                <div>                  <h4>此页面上的内容需要较新版本的 Adobe Flash Player。</h4>                  <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://img.68idc.cn/uploadfile/allimg/150301/1635201525-0.gif" alt="获取 Adobe Flash Player" width="112" height="33" /></a></p>                </div>                <!--[if !IE]>-->              </object>              <!--<![endif]-->            </object>

??

??? 当然,这个paperclip 插件并不支持文件名为中文的上传方式,解决方法可以在上传时,自己重新命名文件名为数字或是别得什么的。?

???

 before_create :randomize_file_name def randomize_file_name        extension = File.extname(elaPDF_file_name).downcase        self.elaPDF.instance_write(:file_name, "#{Time.now.strftime("%y%m%d%H%M%S") + rand(100).to_s}#{extension}")  end

??

      return nil if uploaded_file.nil?    
  extension = File.extname(uploaded_file.original_filename).downcase    
  @queued_for_write[:original]   = to_tempfile(uploaded_file)     
 instance_write(:file_name,       "#{Time.now.strftime("%Y%m%d%H%M%S")}#{rand(1000)}#{extension}")     
 instance_write(:content_type,    uploaded_file.content_type.to_s.strip)      instance_write(:file_size,       uploaded_file.size.to_i)   
   instance_write(:fingerprint,     generate_fingerprint(uploaded_file))    
  instance_write(:updated_at,      Time.now)

?

二 ?使用rails 方法 ,也就是很多人用得方法,此处为多张图片保存到第二张表中的方法

?

? ?1 页面上写法

? ? ??<%=file_field_tag “pic_path[]”%>

?

? ?2 表单controller 方法

? ???if params[:pic_path] && params[:pic_path].size!=0

?

? ? ? ? params[:pic_path].each do |pic_path|

?

? ? ? ? ? ? photo_path=ZyFenxiangPhoto.send_picture(pic_path, zy_fenxiang.id)

?

? ? ? ? ? ? ZyFenxiangPhoto.create(:zy_fenxiang_id=>zy_fenxiang.id,:photo_path=>photo_path)

?

? ? ? ? end

?

? ? ?end

?

? ?3 ?”ZyFenxiangPhoto” model 方法写法

? ? ??#上传图片

? def self.send_picture pic_path, fenxiang_id

? ? ? name = Time.now.strftime(“%y%m%d%I%M%S”) + ‘size’+ pic_path.size.to_s

? ? ? suffix=File.extname(“#{pic_path.original_filename}”)

? ? ? name<<suffix

? ? ? directory = UPPATH+”/zy_fenxiangs/#{fenxiang_id}/”

? ? ? if !File.exist?(directory)

? ? ? ? ?FileUtils.mkdir_p(directory) ? ? ? ? ? ? ? #创建文件夹

? ? ? end

? ? ? path = File.join(directory, name)

? ? ? filesave(pic_path,path)

? ? ? return “/assets/zy_fenxiangs/#{fenxiang_id}/”+name

? end

?#UPPATH=’D:/items/zyt/zyt/app/assets/images’ ?生产或是开发模式下

? #文件上传处理

? def self.filesave(upload,path)

? ? ? File.open(path, “wb”) { |f| f.write(upload.read) }

? end

?

4 ?\config\environment.rb ? 初始路径

? ?environment.rb

?

?

? ? # Load the rails application

? ?require File.expand_path(‘../application’, __FILE__)

?

5 ? 提交表单

?

6 ? 使用图片url ?

? ?直接使用数据地址,因为它是将图片路径直接写入到数据库中

?

7 删除记录同时,同时删除图片

? ? controller 方法

? ? ??zy_fenxiang.zy_fenxiang_photos.each do |zy_fenxiang_photo|

? ? ? ?zy_fenxiang_photo.filedelete ?##删除图片文件

? ? ? ?zy_fenxiang_photo.destroy

? ? end

?

? ?model 方法

? ?#删除图片文件

? def filedelete

? ? ?photo_path=self.photo_path

? ? ?name=photo_path.split(“/”)[photo_path.split(“/”).length-1]

? ? ?if File.exist?(“#{UPPATH}/zy_fenxiangs/#{self.zy_fenxiang_id}/”+name)

? ? ? ? File.delete(“#{UPPATH}/zy_fenxiangs/#{self.zy_fenxiang_id}/”+name)

? ? ?end

? end

?

以上七步,OK过程了,因为是直接将图片路径存入数据库中,所以只要写文件方法。?

?

出门走好路,出口说好话,出手做好事。

rails 上传图片功能

相关文章:

你感兴趣的文章:

标签云: