Rails上传文件

1、view

<%= form_tag({:method =>"post",:controller =>"welcome",:action=>"upload"},:multipart =>true)do %>
<%= file_field ("file","filedata") %>
<%= submit_tag '运行',:class=>"buttonsave"%>
<%end %>

2、controller

  def upload
    uploadFile(params["file"]["filedata"])
  end

  def uploadFile(file)
    if!file.original_filename.empty?
      @filename= getFileName(file.original_filename)# 生成一个随机的文件名

      File.open("#{Rails.root}/public/upload/#{@filename}", "wb") do |f|
        f.write(file.read)# 向dir目录写入文件
      end
      return@filename
    end
  end 

  def getFileName(filename)
    if!filename.nil?
      require'uuidtools'
      filename.sub(/.*./,UUID.random_create.to_s+'.')
    end
  end

注:form一定写成 <%= form_tag({:action =>'upload'}, :multipart => true)%>

for_tag(url_for_options={}, options={}, *parameters_for_url, &block);options 可以指定 mutipart属性。
:action =>'upload', :multipart => true # 会被当成一个最右参数,就都传给了 url_for_opitons;这样multipart参数就被丢弃掉了。
{:action =>'upload'}, :multipart => true # 是两个参数,这样 :mutipart=>true就传给第二个形参 options。

 

posted @ 2013-09-30 09:17  zhangsai  阅读(1098)  评论(0编辑  收藏  举报