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。