`
wanglian
  • 浏览: 69340 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

rails异步上传文件

    博客分类:
  • Ruby
阅读更多

一个完整的例子.

环境: 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用户, 上传一个头像试试.

分享到:
评论

相关推荐

    Rails里给文件上传添加progress_bar

    为了添加进度条功能,我们需要引入一个前端库,如jQuery或React,并结合Ajax进行异步上传。这里我们假设使用jQuery,配合jQuery File Upload插件,它提供了一个简单的API来处理文件上传和进度事件。 1. **安装...

    升级版本后Rails的文件上传

    6. **测试**:确保为文件上传功能编写测试,覆盖上传、删除、替换和访问已上传文件的各种场景。升级后,这些测试能帮助识别并修复可能出现的问题。 7. **性能优化**:考虑文件上传的性能,如分块上传、预处理(如...

    使用uploadify上传文件

    此外,Uploadify还支持多种自定义设置,例如限制上传文件类型、大小、更改按钮文本等,这为我们提供了高度的灵活性来适应不同的项目需求。 总结来说,Uploadify是一个强大的jQuery文件上传插件,能够帮助开发者实现...

    多文件上传功能

    - **Ajax异步上传**: 使用Ajax技术,文件上传可以在后台进行,不会阻塞用户界面,提升用户体验。XMLHttpRequest Level 2支持发送Blob或File对象,使得多文件上传成为可能。 2. **前端处理** - **文件预览**: 在上...

    jQuery File Upload文件上传插件 v10.32.0.zip

    3. **异步上传**:利用Ajax技术,文件可以后台异步上传,用户无需等待文件上传完成即可继续浏览其他页面,提高了用户体验。 4. **进度条显示**:插件提供实时的文件上传进度反馈,用户可以清楚地看到每个文件的上传...

    Ruby on Rails 学习案例

    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`全局变量处理上传...

    Uploadify32jquery上传控件

    在功能方面,Uploadify32支持异步上传,这意味着文件可以在不刷新页面的情况下上传,提高了网页的响应速度。用户可以选择多个文件进行批量上传,节省了时间。同时,Uploadify32会显示上传进度条,让用户实时了解文件...

    simply rails

    - **常见插件推荐**:列出一些流行插件,如Paperclip(用于文件上传)、FriendlyID(用于SEO友好的URL)等。 #### 11. **调试、测试和基准测试** - **调试技巧**:提供有效的调试方法,帮助开发者快速定位问题。 ...

    jQuery File Upload

    6. **异步上传**:该组件通常使用Ajax进行异步上传,这意味着文件上传不会阻塞用户界面,用户可以继续浏览网站的其他部分,提升了用户体验。 7. **自定义配置**:开发者可以通过设置各种选项来定制上传行为,例如...

    ng-file-upload-master.zip

    1. **多文件选择与拖放上传**:ng-file-upload支持用户通过文件选择对话框多选文件,以及通过拖放操作直接上传文件,提供了现代浏览器的友好交互体验。 2. **进度显示与取消上传**:在上传过程中,ng-file-upload...

    s3_relay:直接上传到S3并由您的Rails应用提取

    启用直接文件上传到Amazon S3的功能,并为Rails应用程序提供灵活的模式以异步提取文件。 注意:如果您使用的是Rails 5.2+,则应考虑迁移到Active Storage,因为Rails 6+不会支持此gem。 概述 通过此Rails引擎,您...

    The.Art.of.Rails.May.2008

    8. **Rails插件与gem**:介绍常用的Rails插件和gem库,如Devise用于身份验证,Carrierwave或Paperclip用于文件上传等。 9. **社区和工具**:Rails拥有强大的社区支持,书中可能提到社区资源、开发工具(如Rails ...

    awesome-rails-gem-zh_CN, Rails 常用 Gem 列表 - Awesome Rails Gem 中文版.zip

    4. **Paperclip** 和 **CarrierWave**:这两个Gem用于文件上传,支持图片处理和存储服务集成。 5. **Pundit**:轻量级的授权库,用于创建更细粒度的权限控制,相比CanCanCan更简单。 6. **Bootstrap-Sass** 和 **...

    Wrox - Professional Ruby on Rails (Feb 2008)

    书中可能介绍了如何使用和开发Gem,以及常见的Rails插件如Devise(身份验证)、CanCanCan(授权)和Paperclip(文件上传)等。 9. **部署与性能优化**:书中可能会讲解如何将Rails应用部署到服务器,如使用...

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

    4. **异步上传**:采用AJAX技术实现后台异步上传,不打断用户当前操作,页面保持流畅。 5. **自定义样式和行为**:开发者可以根据项目需求定制上传按钮、样式和反馈信息。 6. **跨浏览器支持**:兼容主流浏览器,...

    源代码 for web开发敏捷之道:应用rails进行敏捷web开发(原书第4版)

    10. **Rails插件和gem**:介绍如何利用社区的插件和gem扩展Rails的功能,例如Devise用于用户认证,CanCanCan处理授权,或者Paperclip或Carrierwave处理文件上传。 11. **AJAX和JavaScript**:了解如何在Rails中集成...

    jQuery-File-Upload

    传统表单提交会刷新页面,但jQuery-File-Upload使用Ajax技术异步上传文件,使得文件上传过程中页面保持不刷新,提升了用户体验。同时,它还可以处理文件数据和其他表单字段的上传,确保所有必要的数据一起发送到...

    Ruby on Rails开发的五点建议

    利用服务如Amazon S3来处理大文件上传,减轻服务器压力。 3. **利用缓存技术**:缓存是提高性能的有效手段。使用数据库缓存服务器,如Redis或Memcached,将经常访问的数据存储在内存中,减少对数据库的直接访问。...

Global site tag (gtag.js) - Google Analytics