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

活用插件attachment_fu,在rails中以AJAX方式上传文件

阅读更多
这篇文章主要解决的问题是用attachment插件和responds_to_parent插件实现ajax方式上传文件(图片)的目的。
Step 1. Choose a file upload plugin(选择上传插件)
可用的上传插件有如下三种:
[list=]1.file_column
2.acts_as_attachment
3.attachment_fu [/list]
推荐attachment fu+rails1.2.
Step 2. 选择安装Rmagic
gem install rmagic

Step 3. 新建项目并下载插件attachment_fu
新建项目demo
引用
rails demo

安装插件attachment_fu:
引用
cd demo
ruby script/plugin install http://svn.techno-weenie.net/projects/plugins/attachment_fu/

Step 4. 开始编写代码
用下面命令创建一个rails资源asset
引用
ruby script/generate scaffold_resource asset filename:string content_type:string size:integer width:integer height:integer parent_id:integer thumbnail:string created_at:datetime

下面是自动生成的migration,可自行修改,在此我们使用默认。
class CreateAssets < ActiveRecord::Migration
  def self.up
    create_table :assets do |t|
      t.column :filename, :string
      t.column :content_type, :string
      t.column :size, :integer
      t.column :width, :integer
      t.column :height, :integer
      t.column :parent_id, :integer
      t.column :thumbnail, :string
      t.column :created_at, :datetime
    end
  end

  def self.down
    drop_table :assets
  end
end

在模型中,我们加入以下代码:
class Asset < ActiveRecord::Base
  has_attachment  :storage => :file_system, 
                  :max_size => 1.megabytes,
            :thumbnails => { :thumb => '80x80>', :tiny => '40x40>' },
                                    :processor => :Rmagick 
end


Step 5. AJAX it
把Javascript prototype/scriptaculous 加入layout.
<%= javascript_include_tag "prototype", "effects", "application" %>

安装插件responds_to_parent
ruby script/plugin install http://sean.treadway.info/svn/plugins/responds_to_parent/

修改index.rhtml:
<% form_for(:asset, :url => formatted_assets_path(:js), 
            :html => { :multipart => true, 
            :target => 'upload_frame'}) do |form| %>
<%= render(:partial => '/assets/form', : object => form) %>
<% end %>
<iframe id='upload_frame' name="upload_frame" style="width:1px;height:1px;border:0px" src="about:blank"></iframe>
<ul id="assets">
<% @assets.each do |a|%>
<%= render(:partial => '/assets/list_item', : object => a)%>
<% end %>
</ul>

新建一个局部模版文件_form.rhtml:
<p>
    <label for="uploaded_data">Upload a file:</label>
    <%= form.file_field :uploaded_data %>
  </p>
  <p>
    <%= submit_tag "Create" %>
</p>

新建一个局部模版文件_list_item.rhtml:
<li id="asset_<%= list_item.id %>">
<%= link_to(image_tag(list_item.public_filename(:thumb))) %><br />
</li>

修改assets_controller.rb中的create方法如下:
  def create
  @asset = Asset.new(params[:asset])
  respond_to do |format|
    if @asset.save
      flash[:notice] = 'Asset was successfully created.'
      format.html { redirect_to asset_url(@asset) }
      format.xml  { head :created, :location => asset_url(@asset) }
      format.js do
        responds_to_parent do
          render :update do |page|
            page.insert_html :bottom, "assets", :partial => '/assets/list_item', : object => @asset
            page.visual_effect :highlight, "asset_#{@asset.id}" 
          end
        end          
      end
    else
      format.html { render :action => "new" }
      format.xml  { render :xml => @asset.errors.to_xml }
      format.js do
        responds_to_parent do
          render :update do |page|
              # update the page with an error message
          end
        end          
      end
    end
  end
end

最后别忘了,修改config文件夹中的database.yml文件,创建相应的数据库,并执行命令:
rake db:migrate
ruby script/server

然后到浏览器里面查看效果吧!

注:本文翻译自http://khamsouk.souvanlasy.com/。更详细的介绍请访问原文。另外本篇所介绍的内容经过测试没有问题。欢迎讨论交流
  • 描述: 效果图
  • 大小: 2.3 MB
  • demo1.rar (113 KB)
  • 描述: 我做的例子
  • 下载次数: 418
分享到:
评论
18 楼 blueanson 2008-03-05  
请问一下,attachment_fu对应的表结构

1.可否少一些字段,不记录一些需要的记录

2.可否将所有的:thumbnails类型,比如缩略图,小图,大图,不要分开多点记录存储,而是一条记录多个字段

谢谢
17 楼 Auckland 2008-01-18  
我也参考

http://clarkware.com/cgi/blosxom/2007/02/24

自己写了个小demo。所需要的 东西都安装了,程序运行也没有题。
但是没有缩略图,只有原大小的图片。
rails 环境是 2.0.1,rmagic 2.1.0

  has_attachment :content_type => :image, 
                 :storage => :file_system, 
                 :max_size => 500.kilobytes,
                 :thumbnails => { :thumb => '80x90>',:processor => :Rmagick  }


好象是rmagick没有生成thumbnails.只是把原图上传到文件系统了。
怎样解决呢?
16 楼 weskycn 2007-11-15  
已发送到第一个邮箱里了,查收
15 楼 zxwilde 2007-11-15  
zhangxin@kingskysoft.com

zxwilde@sina.com

麻烦你了,谢谢!
14 楼 weskycn 2007-11-13  
呵呵,附件demo1.rar里就有responds_to_parent这个插件,直接拷贝到/vender/plugin/下就可以了
13 楼 weskycn 2007-11-13  
给我你的邮箱,我直接发给你。
12 楼 zxwilde 2007-11-12  
http://sean.treadway.info/svn/plugins/responds_to_parent/ 
该地址无法下载安装responds_to_parent插件,不知道,是不是我自身的问题。
Plugin not found: ["http://sean.treadway.info/svn/plugins/responds_to_parent/"]
11 楼 weskycn 2007-11-08  
你是把rmagic安装到插件里了么?rmagic不应该在vender下面。
10 楼 zyyseu 2007-11-07  
楼主客气了.
按着你所给的介绍安装rmagick的方法进行安装,还是不行,不知道问题出在哪...
我用的是netbean的开发环境,内嵌的jruby
9 楼 weskycn 2007-11-06  
不好意思,这几天一直没有上javaeye!

rmagick是gem到ruby里的,我觉得你应该检查下你的rmagic安装是否正确,参考资料:http://www.iteye.com/topic/69518

另外,如果还不行,继续在下面发帖子。尽量帮你弄好。
8 楼 zyyseu 2007-11-04  
跑了你的程序,缩略图显示不出来,楼主,大概是什么原因呢?
7 楼 zyyseu 2007-11-02  
我用的是netbean,刚学着用的,还不熟
但是在project的vender目录下有几个需要安装的插件的,rmagick,和attachment_fu都有
6 楼 weskycn 2007-11-02  
插件没有装好吧?你把具体错误贴出来,还有,rmagic装了吗?

你看看附件里我做的例子吧(新增)。We.Sky
5 楼 zyyseu 2007-11-02  
undefined method `has_attachment' for Asset:Class

这个错误怎么办?
4 楼 weskycn 2007-10-12  
:cry:
3 楼 weskycn 2007-09-16  
请问您的rails版本是多少?最起码要rails_1.2.3的。
2 楼 luodongju325 2007-09-14  
在controller的creat中可以这样写吧,我怎么会报错呀
<img src="/images/rails.png"/>bject => @asset
1 楼 luodongju325 2007-09-14  
第4步的时候我是用上面的代码创建asset,但总是出现
"could't find 'scaffold_resource' generator

相关推荐

    agile_web_development_with_rails_3rd_edition.9994652073.pdf

    为了确保代码的正确运行,作者建议在使用本书示例代码之前,先检查自己所用的Rails版本是否与书中的版本一致。如果使用的是后续版本,应当查阅作者维护的维基页面,查看是否有任何代码更改的必要。通过执行`rails -v...

    Rails101_by_rails4.0

    此外,书中还介绍了一些Rails中的高级概念,如Strong Parameters(强参数),它在Rails 4.0版本中引入,用于解决之前版本中的参数篡改问题,从而帮助开发者安全地处理外部提交的数据。 通过一系列的教学内容,包括...

    rails上传文件_paperclip

    在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...

    swf_fu:Rails插件:将您的Adobe Flash swf文件与其他资产(图像,javascript等)一样对待,并使用SWFObject 2.2嵌入它们

    使用swf_fu插件,Rails会将您的swf文件像其他任何资产一样对待(图像,javascript等)。 swf_fu (发音为“ swif-fu”,法语使用者的笑话)使用SWFObject 2.2将swf对象嵌入HTML并支持其所有选项。 SWFObject 2是一...

    rails ajax提交文件或图片

    在本篇博文中,我们将深入探讨如何在Rails中利用AJAX提交文件或图片。 首先,我们需要设置一个表单来允许用户上传文件。在Rails中,`form_for`辅助方法可以帮助我们创建一个表单,但为了支持AJAX提交,我们需要将其...

    rails_多文件上传

    Rails 多文件上传插件实现详解 Rails 多文件上传插件是基于 Ruby on Rails 框架的一款插件,旨在实现多文件的同时上传,控制文件的格式、数量,并且兼容多种浏览器,包括 IE6、7、Firefox 等。下面是对插件的详细...

    jack_up, 在 Rails 中,[DEPRECATED] 轻松AJAX文件上传.zip

    jack_up, 在 Rails 中,[DEPRECATED] 轻松AJAX文件上传 从October年8 月开始,已经不推荐使用 另外,对于其他的, 付费和免费的上传工具,JackUp已经被否决了。 JackUp简单AJAX文件在 Rails 中上传。安装修改你的...

    to_xls-rails:将Rails ActiveRecord或Mongid数据导出到Excel文件

    这个简单的插件使您能够调用to_xls到Rails的数组集合。 数组元素支持对象:ActiveRecord,Mongid,哈希。 在您的Gemfile中: gem 'to_xls-rails' # Last officially released gem # gem "to_xls-rails", :git =&gt; ...

    version_fu:act_as_versioned的Rails 3更新

    version_fu version_fu是一个ActveRecord版本控制插件,该插件基于Rails 2.1中引入的脏属性检查。 已对其进行更新以与Rails 3兼容。安装 gem install version_fu如果您使用的是Rails 3,请将其添加到Gemfile中gem '...

    factory_bot_rails:工厂机器人:heart_suit:Rails

    用简单的定义语法替换了固定装置,支持多种构建策略(保存的实例,未保存的实例,属性哈希和存根对象),并且支持同一类的多个工厂( user , admin_user等),包括工厂继承。 从factory_girl_rails过渡? 查看 。...

    jruby_on_rails

    在这个上下文中,这个文件可能是关于 JRuby on Rails 的一个互动教程或演示,帮助初学者了解如何使用 JRuby 开发 Rails 应用。遗憾的是,由于 Flash 技术已经逐渐被淘汰,现代浏览器可能不再支持播放 SWF 文件,因此...

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **使用**:在视图文件中通过`&lt;%= render component %&gt;`的方式调用组件。 #### 九、安全性 - **重要性**:确保Web应用的安全对于保护用户数据至关重要。 - **措施**:Rails提供了多种内置的安全特性,如防止跨站...

    Ruby_On_Rails笔记

    例如,Rails中的控制器文件通常位于app/controllers目录下,且文件名需以Controller结尾,类名则遵循小写和下划线命名约定。例如,HelloWorldController.rb文件位于app/controllers目录下,并继承自...

    Rails中上传文件保存中文文件名乱码

    在Rails框架中处理文件上传时,经常会遇到一个问题,那就是当用户尝试上传包含中文名称的文件时,文件名可能会出现乱码。这个问题主要是由于字符编码不兼容导致的。Rails默认使用UTF-8编码,但文件系统或者某些外部...

    vote_fu_rails_3:投票和业力管理(现在有Rails 3支持)

    (现在兼容Banana和Rails 3!) 现在跳舞!混合蛋白该插件为您的食谱书引入了三种混合: actions_as_voteable :适用于帖子,评论等内容对象。 actions_as_voter :供投票实体(例如用户)使用。 has_karma :用于...

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器.zip

    rails_semantic_logger, Rails 语义记录器用语义记录器替换 Rails 缺省记录器 Rails 语义记录器 语义记录器用语义记录器替代 Rails 缺省记录器。http://github.com/rocketjob/rails_semantic_logger文档有关完整文档...

    用于过滤英文脏话的 Rails 插件 gem_Ruby_代码_相关文件_下载

    在Ruby on Rails开发中,有时候我们需要对用户输入的数据进行过滤,特别是处理英文内容时,防止出现不合适的脏话或亵渎性词汇。标题提到的"用于过滤英文脏话的 Rails 插件 gem"正是为了解决这个问题。这个插件允许...

    avatars_for_rails:用于管理头像的 Rails gem

    化身对于Rails开发 Avatars For Rails 是一个完整的解决方案,可为模型提供头像支持。 它包括一个数据库迁移和带有 jquery.fileupload 和 jquery.jcrop 的视图 它依赖于回形针和 ...在您的模型中,您必须包括

    Ajax on Rails

    **Ajax on Rails** 是一本关于如何在Rails框架中利用Ajax技术来提升Web应用程序用户体验的书籍。Ajax(异步JavaScript和XML)技术允许开发者在不刷新整个页面的情况下更新部分网页内容,从而提供更流畅、响应更快的...

Global site tag (gtag.js) - Google Analytics