`

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://www.adobe.com/images/shared/download_buttons/get_flash_player.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上传文件_paperclip

    Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件上传功能变得相当便捷。 **Paperclip的基本使用** 1. **安装与配置** 首先,你需要通过Gemfile来安装Paperclip,并运行`bundle install`命令: ```...

    rails_多文件上传

    2. 文件格式控制:插件可以控制文件的格式,限制上传的文件类型,例如限制上传图片、文档、音频、视频等。 3. 文件数量控制:插件可以控制上传文件的数量,限制上传文件的个数。 4. 多浏览器兼容:插件兼容多种...

    rails上传图片代码实例

    今天讲解一下rails的图片上传,就是最平常的上传图片 这里的rails版本2.3.5 首先新建一个write_pic model内容如下: 代码如下:class WritePicrequire “RMagick”require “uuid”def self.write(pic_data,ori_name,...

    rails 文件上传

    在Ruby on Rails框架中,...通过理解以上知识点,你将能够构建一个功能完善的Rails文件上传系统,确保用户能安全、便捷地上传和管理他们的文件。在实际项目中,还需要考虑性能优化、错误处理和用户体验等方面的问题。

    Rails项目源代码

    这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...

    RailsSpace

    这不仅涉及图片的上传和存储,还需要考虑到图片裁剪和缩放等图像处理技术的应用。 ##### 5.5 邮件集成 第十三章“Email”介绍了如何将电子邮件集成到Rails应用中,以便于发送激活邮件、重置密码邮件等。本章将介绍...

    rails 多图上传.txt

    在实现Rails应用中的多图上传功能时,通常需要借助于特定的插件或Gem来简化开发流程并增强功能。以下两个工具是必不可少的: 1. **Paperclip(Gem)** - **用途**:用于后台文件处理,是一款非常强大的工具,支持...

    批量上传相册功能源码(包含各种语言)

    批量上传相册功能是许多网站和应用程序中常见的一项功能,它允许用户一次性上传多张图片到他们的相册,极大地提高了用户交互性和效率。本资源提供了一系列的源代码,覆盖了多种编程语言,使得开发者能够快速集成批量...

    ruby on rails最新版

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

    Rails 3 in Action

    - 实现用户可以上传图片、文档等文件的功能。 - 需要考虑安全性问题,防止恶意文件上传。 - 可以使用第三方服务,如 Amazon S3 来存储文件。 #### 八、状态跟踪 第十章关注 **状态跟踪**,即在用户会话期间保存...

    jQuery File Upload 基于Jquery的图片上传组件

    它提供了一套完整的解决方案,包括多文件选择、上传进度显示、取消与删除上传任务、预览上传图片等功能,使得在前端实现复杂的文件上传操作变得简单易行。 该组件的一大特色是其对 **多文件上传** 的支持。用户可以...

    Rails实现的简历系统

    综上所述,这个简历系统涵盖了Rails开发中的多个重要方面,从用户交互(图片上传、验证码)、数据管理(查询、分页、排序)到后台功能(邮件发送),构建了一个完整的功能集。开发者可以通过这个项目学习和实践Rails...

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

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

    Ruby-Ruby绑定ImageMagick

    Ruby是一种强大的动态编程语言,广泛应用于Web开发、脚本编写以及各种高级编程任务。...无论是Web应用中的图像上传处理,还是独立的图像处理脚本,RMagick都能满足需求,帮助你实现高效且高质量的图像处理功能。

    ruby rails_kindeditor(编译器)插件

    2. **图片和文件上传**:`rails_kindeditor` 支持图片和文件的上传功能。你需要配置一个专门用于存储这些上传文件的目录,并在服务器端处理文件上传的逻辑,确保安全性。 3. **安全考虑**:由于富文本编辑器允许...

    多文件上传功能

    - **文件预览**: 在上传前,可以通过File API读取文件内容生成预览图,对图片、文本等格式的文件进行预览,确保用户上传的文件符合预期。 - **文件大小限制**: 为防止过大文件导致服务器压力,前端通常会限制...

    应用rails进行敏捷web开发

    7. **Asset Pipeline**:Rails的静态资源管理,包括CSS、JavaScript和图片,提供合并、压缩和版本控制等功能。 8. **Heroku部署**:Rails应用常使用的云平台,提供了便捷的一键部署和管理服务。 9. **Rails安全**...

    具有多文件上传、拖拽、进度条和图像预览功能的文件上传插件

    具有多文件上传、拖拽、进度条和图像预览功能的文件上传插件,支持跨域、分块、暂停恢复和客户端图像缩放。可与任何服务端平台(如PHP、Python、Ruby on Rails、Java、Node.js、Go等)一起使用,支持标准的HTML表单...

Global site tag (gtag.js) - Google Analytics