一个完整的例子.
环境: rails 2.0.2
1 创建一个项目
rails example
cd example
2 安装插件
paperclip:
svn export https://svn.thoughtbot.com/plugins/paperclip/trunk/ vendor/plugins/paperclip
paperclip让model具备附件功能,个人认为比attachment_fu更好用.
responds to parent:
svn export http://responds-to-parent.googlecode.com/svn/trunk vendor/plugins/responds_to_parent
不能用ajax来上传文件,而是用iframe来上传.iframe完成上传后需要通知母窗口,这就是responds to parent这个插件提供的功能.
3 生成基础代码
script/generate scaffold user name:string
先跑起来
rake db:migrate
script/server
OK, 访问 http://localhost:3000/users
先创建一个用户: test
4 给User增加头像功能
在user.rb中,增加
has_attached_file :avatar, :styles => { :medium => "300x300>", :thumb => "100x100>" }
给users加几个字段
script/generate migration add_avatar_columns_to_user
修改migration文件:
class AddAvatarColumnsToUser < ActiveRecord::Migration
def self.up
add_column :users, :avatar_file_name, :string
add_column :users, :avatar_content_type, :string
add_column :users, :avatar_file_size, :integer
end
def self.down
remove_column :users, :avatar_file_name
remove_column :users, :avatar_content_type
remove_column :users, :avatar_file_size
end
end
rake db:migrate
修改view文件: edit.html.erb
<h1>Editing user</h1>
<%= error_messages_for :user %>
<% form_for(@user, :url => formatted_user_path(@user, 'js'), :html => {:method => :put, :id => 'avatar_form', :multipart => true, :target => 'upload_frame'}) do |f| %>
<p>
<b>Name</b><br />
<%= f.text_field :name %>
</p>
<p>
<b>avatar</b><br />
<div id="avatar"><%= image_tag @user.avatar.url(:medium) %></div>
</p>
<%= f.file_field :avatar %>
<p>
<%= f.submit "Update" %>
</p>
<% end %>
<iframe id='upload_frame' name="upload_frame" style="width:1px;height:1px;border:0px" src="about:blank"></iframe>
<%= link_to 'Show', @user %> |
<%= link_to 'Back', users_path %>
layout文件users.html.erb中增加:
<%= javascript_include_tag :defaults %>
users_controller.rb, 修改update方法, 增加
format.js do
flash[:notice] = 'avatar updated'
responds_to_parent do
render :update do |page|
page.replace_html :avatar, image_tag(@user.avatar.url(:medium))
page[:avatar_form].reset
end
end
end
OK, 编辑test用户, 上传一个头像试试.
分享到:
相关推荐
为了添加进度条功能,我们需要引入一个前端库,如jQuery或React,并结合Ajax进行异步上传。这里我们假设使用jQuery,配合jQuery File Upload插件,它提供了一个简单的API来处理文件上传和进度事件。 1. **安装...
6. **测试**:确保为文件上传功能编写测试,覆盖上传、删除、替换和访问已上传文件的各种场景。升级后,这些测试能帮助识别并修复可能出现的问题。 7. **性能优化**:考虑文件上传的性能,如分块上传、预处理(如...
此外,Uploadify还支持多种自定义设置,例如限制上传文件类型、大小、更改按钮文本等,这为我们提供了高度的灵活性来适应不同的项目需求。 总结来说,Uploadify是一个强大的jQuery文件上传插件,能够帮助开发者实现...
- **Ajax异步上传**: 使用Ajax技术,文件上传可以在后台进行,不会阻塞用户界面,提升用户体验。XMLHttpRequest Level 2支持发送Blob或File对象,使得多文件上传成为可能。 2. **前端处理** - **文件预览**: 在上...
3. **异步上传**:利用Ajax技术,文件可以后台异步上传,用户无需等待文件上传完成即可继续浏览其他页面,提高了用户体验。 4. **进度条显示**:插件提供实时的文件上传进度反馈,用户可以清楚地看到每个文件的上传...
10. **Gem包管理**:Ruby的Gem是类似Python的pip或Node.js的npm的包管理工具,Rails应用广泛依赖于Gems,如Devise用于身份验证,Pundit或CanCanCan用于权限管理,Carrierwave或Paperclip处理文件上传等。 11. **...
- **JavaScript**:可以使用AJAX或者Fetch API实现异步上传,配合库如jQuery-File-Upload或Dropzone.js。 - **Python**:Django和Flask框架提供了文件上传的便捷处理。 - **PHP**:使用`$_FILES`全局变量处理上传...
在功能方面,Uploadify32支持异步上传,这意味着文件可以在不刷新页面的情况下上传,提高了网页的响应速度。用户可以选择多个文件进行批量上传,节省了时间。同时,Uploadify32会显示上传进度条,让用户实时了解文件...
- **常见插件推荐**:列出一些流行插件,如Paperclip(用于文件上传)、FriendlyID(用于SEO友好的URL)等。 #### 11. **调试、测试和基准测试** - **调试技巧**:提供有效的调试方法,帮助开发者快速定位问题。 ...
6. **异步上传**:该组件通常使用Ajax进行异步上传,这意味着文件上传不会阻塞用户界面,用户可以继续浏览网站的其他部分,提升了用户体验。 7. **自定义配置**:开发者可以通过设置各种选项来定制上传行为,例如...
1. **多文件选择与拖放上传**:ng-file-upload支持用户通过文件选择对话框多选文件,以及通过拖放操作直接上传文件,提供了现代浏览器的友好交互体验。 2. **进度显示与取消上传**:在上传过程中,ng-file-upload...
启用直接文件上传到Amazon S3的功能,并为Rails应用程序提供灵活的模式以异步提取文件。 注意:如果您使用的是Rails 5.2+,则应考虑迁移到Active Storage,因为Rails 6+不会支持此gem。 概述 通过此Rails引擎,您...
8. **Rails插件与gem**:介绍常用的Rails插件和gem库,如Devise用于身份验证,Carrierwave或Paperclip用于文件上传等。 9. **社区和工具**:Rails拥有强大的社区支持,书中可能提到社区资源、开发工具(如Rails ...
4. **Paperclip** 和 **CarrierWave**:这两个Gem用于文件上传,支持图片处理和存储服务集成。 5. **Pundit**:轻量级的授权库,用于创建更细粒度的权限控制,相比CanCanCan更简单。 6. **Bootstrap-Sass** 和 **...
书中可能介绍了如何使用和开发Gem,以及常见的Rails插件如Devise(身份验证)、CanCanCan(授权)和Paperclip(文件上传)等。 9. **部署与性能优化**:书中可能会讲解如何将Rails应用部署到服务器,如使用...
4. **异步上传**:采用AJAX技术实现后台异步上传,不打断用户当前操作,页面保持流畅。 5. **自定义样式和行为**:开发者可以根据项目需求定制上传按钮、样式和反馈信息。 6. **跨浏览器支持**:兼容主流浏览器,...
10. **Rails插件和gem**:介绍如何利用社区的插件和gem扩展Rails的功能,例如Devise用于用户认证,CanCanCan处理授权,或者Paperclip或Carrierwave处理文件上传。 11. **AJAX和JavaScript**:了解如何在Rails中集成...
传统表单提交会刷新页面,但jQuery-File-Upload使用Ajax技术异步上传文件,使得文件上传过程中页面保持不刷新,提升了用户体验。同时,它还可以处理文件数据和其他表单字段的上传,确保所有必要的数据一起发送到...
利用服务如Amazon S3来处理大文件上传,减轻服务器压力。 3. **利用缓存技术**:缓存是提高性能的有效手段。使用数据库缓存服务器,如Redis或Memcached,将经常访问的数据存储在内存中,减少对数据库的直接访问。...