rails上传文件_非插件

rails文件上传

 

除了通过paperclip等插件来上传文件之外,也可以不用插件,用ruby的File模块中的方法来实现文件上传。

 

一、控制器

 

   在控制器中加入以下两个方法,其中getfilename用来修改所上传的文件名称,

  在我所上传的文件中存在空格,会出现,系统找不到文件的错误,所以将文件中的空格去掉,

 

 def uploadfile(file)
    if !file.original_filename.empty?
      @filename=getfilename(file.original_filename)
#设置目录路径,如果目录不存在,生成新目录
 FileUtils.mkdir("#{RAILS_ROOT}/db/upload") unless File.exist?("#{RAILS_ROOT}/db/upload")
#写入文件      
File.open("#{RAILS_ROOT}/db/upload/#{@filename}", "wb") do |f|
        f.write(file.read)
      end
      return @filename
    end
  end

#文件名
 def getfilename(filename)
    if !filename.nil?
      filename.split(' ').to_s
    end
  end

 二、视图

form_tag的模板:

<% form_tag  :multipart => true  do %>
    <%= file_field_tag "photo" %>
  <% end %>

 form_for的模板:

 

<% form_for :user, @product, :html => { :multipart => true } do |f| %>
    <%= f.file_field :photo%>
  <% end %>

 

注意:两种表单multipart属性的写法,通过加这个属性使表单支持上传文件,不加这个属性或写的不对,会报下面的错   误.

NoMethodError (undefined method `original_filename' for " 20100824 1427.sql":String):
  app/controllers/admin/dbmanager_controller.rb:56:in `uploadfile'
  app/controllers/admin/dbmanager_controller.rb:32:in `restore'
  c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:104:in `service'
  c:/ruby/lib/ruby/1.8/webrick/httpserver.rb:65:in `run'
  c:/ruby/lib/ruby/1.8/webrick/server.rb:173:in `start_thread'
  c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start'
  c:/ruby/lib/ruby/1.8/webrick/server.rb:162:in `start_thread'
  c:/ruby/lib/ruby/1.8/webrick/server.rb:95:in `start'
  c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `each'
  c:/ruby/lib/ruby/1.8/webrick/server.rb:92:in `start'
  c:/ruby/lib/ruby/1.8/webrick/server.rb:23:in `start'
  c:/ruby/lib/ruby/1.8/webrick/server.rb:82:in `start'

 读取图片时:

 <%= image_tag @product.photo.url %>
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值