ruby 代码
- class CreatePictures < ActiveRecord::Migration
- def self.up
- create_table :pictures do |t|
- t.column :comment, :string, :limit=>100
- t.column :name, :string, :limit=>200
- t.column :content_type, :string, :limit=>100
- t.column :title, :binary
- end
- end
-
- def self.down
- drop_table :pictures
- end
- end
ruby 代码
- class RenameColumnData < ActiveRecord::Migration
- def self.up
- rename_column :pictures,:title, :data
- end
-
- def self.down
- rename_column :pictures,:data, :title
- end
- end
以上是通过migration建立相应的数据表。
建立controller:
ruby 代码
- class UploadController < ApplicationController
- def get
- @picture = Picture.new
- end
- end
建立get template:
ruby 代码
- <%= error_messages_for("picture") %>
- <%= form_tag({:action => 'save'}, :multipart => true) %>
- Comment: <%= text_field("picture", "comment") %>
- Upload your picture: <%= file_field("picture", "picture") %>
- <%= submit_tag("Upload file") %>
- <%= end_form_tag %>
-
-
建立model:
ruby 代码
- class Picture < ActiveRecord::Base
- validates_format_of :content_type, :with => /^image/,
- :message => "--- you can only upload pictures"
- def picture=(picture_field)
- self.name = base_part_of(picture_field.original_filename)
- self.content_type = picture_field.content_type.chomp
- self.data = picture_field.read
- end
- def base_part_of(file_name)
- name = File.basename(file_name)
- name.gsub(/[^\w._-]/, '')
- end
- end
扩充controller,添加save action:
ruby 代码
- def save
- @picture = Picture.new(params[:picture])
- if @picture.save
-
- redirect_to(:action => 'show', :id => @picture.id)
- else
- render(:action => :get)
- end
- end
扩充controller,添加picture action:
ruby 代码
- def picture
- @picture = Picture.find(params[:id])
- send_data(@picture.data,
- :filename => @picture.name,
- :type => @picture.content_type,
- :disposition => "inline")
- end
定义show action:
ruby 代码
- def show
- @picture = Picture.find(params[:id])
- end
显示图片:
ruby 代码
注:引自Dave Thomas的《Agile Web Development with Rails》
分享到:
相关推荐
在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...
今天讲解一下rails的图片上传,就是最平常的上传图片 这里的rails版本2.3.5 首先新建一个write_pic model内容如下: 代码如下:class WritePicrequire “RMagick”require “uuid”def self.write(pic_data,ori_name,...
2. 文件格式控制:插件可以控制文件的格式,限制上传的文件类型,例如限制上传图片、文档、音频、视频等。 3. 文件数量控制:插件可以控制上传文件的数量,限制上传文件的个数。 4. 多浏览器兼容:插件兼容多种...
在Ruby on Rails框架中,文件上传是一个常见的需求,例如用户头像、产品图片或文档的上传。本篇文章将深入探讨Rails中的文件上传机制,并结合给定的“rails 文件上传”主题,提供关于如何在Rails应用中实现文件上传...
这个“Rails项目源代码”是一个使用Rails构建的图片分享网站的完整源代码,它揭示了如何利用Rails的强大功能来创建一个允许用户上传、分享和浏览图片的应用。 1. **Rails框架基础**: Rails的核心理念是DRY(Don't...
### Rails多图上传知识点详解 #### 一、所需插件及Gem包介绍 在实现Rails应用中的多图上传功能时,通常需要借助于特定的插件或Gem来简化开发流程并增强功能。以下两个工具是必不可少的: 1. **Paperclip(Gem)**...
这不仅涉及图片的上传和存储,还需要考虑到图片裁剪和缩放等图像处理技术的应用。 ##### 5.5 邮件集成 第十三章“Email”介绍了如何将电子邮件集成到Rails应用中,以便于发送激活邮件、重置密码邮件等。本章将介绍...
Ruby是一种强大的动态编程语言,广泛应用于Web开发、脚本编写以及各种高级编程任务。...无论是Web应用中的图像上传处理,还是独立的图像处理脚本,RMagick都能满足需求,帮助你实现高效且高质量的图像处理功能。
例如,Devise用于用户认证,CanCanCan用于授权管理,Paperclip或Carrierwave处理文件上传,Stripe或PayPal集成支付功能,以及各种数据分析和报表生成库等。 总的来说,这个压缩包对于Ruby on Rails的初学者或希望...
在本篇博文中,我们将深入探讨如何在Rails中利用AJAX提交文件或图片。 首先,我们需要设置一个表单来允许用户上传文件。在Rails中,`form_for`辅助方法可以帮助我们创建一个表单,但为了支持AJAX提交,我们需要将其...
- 实现用户可以上传图片、文档等文件的功能。 - 需要考虑安全性问题,防止恶意文件上传。 - 可以使用第三方服务,如 Amazon S3 来存储文件。 #### 八、状态跟踪 第十章关注 **状态跟踪**,即在用户会话期间保存...
2. **图片上传**:在Rails中,我们可以利用ActiveStorage组件来处理用户上传的图片。ActiveStorage与云存储服务如Amazon S3或Google Cloud Storage集成,方便地处理文件上传、存储和检索。它还提供了一套内置的图像...
书中涵盖了Rails的MVC架构、Gems的使用、Bootstrap的集成、用户认证、数据库操作等重要知识点,同时还介绍了如何使用Paperclip上传图片、使用Amazon S3存储图片以及如何对网站进行样式和功能的优化
10. **Rails社区和生态**:Rails有庞大的开发者社区,提供了众多高质量的开源gem,如Devise(用户认证)、Paperclip或Carrierwave(文件上传)、Pundit或CanCanCan(授权)、Resque或Sidekiq(后台任务处理)等。...
2. **图片和文件上传**:`rails_kindeditor` 支持图片和文件的上传功能。你需要配置一个专门用于存储这些上传文件的目录,并在服务器端处理文件上传的逻辑,确保安全性。 3. **安全考虑**:由于富文本编辑器允许...
批量上传相册功能是许多网站和应用程序中常见的一项功能,它允许用户一次性上传多张图片到他们的相册,极大地提高了用户交互性和效率。本资源提供了一系列的源代码,覆盖了多种编程语言,使得开发者能够快速集成批量...
在Rails应用中,这种类型的应用通常会涉及用户上传图片、查看图片、评论图片等功能,需要处理图像存储(例如使用S3服务)、数据库设计(如用户、照片、评论表的结构)以及前后端交互逻辑。此外,由于是与OpsWorks...
4. **Paperclip** 和 **CarrierWave**:这两个Gem用于文件上传,支持图片处理和存储服务集成。 5. **Pundit**:轻量级的授权库,用于创建更细粒度的权限控制,相比CanCanCan更简单。 6. **Bootstrap-Sass** 和 **...