以前习惯了用webwork,都好久没有过问过文件如何具体上传的了,只是拿cos来用一下,要不是今天需要处理rails文件上传都快忘记了
目标:
将文件保存到指定的文件夹中,对它重命名,保存重命名后的文件名称
为了能使任何controller都能使用文件上传的功能,变将代码放置在application.rb中
在页面中,我们定义一<%=file_field "object","field"%>
然后在对应的controller中调用即可
目标:
将文件保存到指定的文件夹中,对它重命名,保存重命名后的文件名称
为了能使任何controller都能使用文件上传的功能,变将代码放置在application.rb中
- # Filters added to this controller will be run for all controllers in the application.
- # Likewise, all the methods added will be available for all controllers.
- class ApplicationController < ActionController::Base
- before_filter :configure_charsets
- def configure_charsets
- @headers["Content-Type"]="text/html;charset=utf-8"
- end
- def uploadFile(file)
- if !file.original_filename.empty?
- #生成一个随机的文件名
- @filename=getFileName(file.original_filename)
- #向dir目录写入文件
- File.open("#{RAILS_ROOT}/public/emag/upload/#{@filename}", "wb") do |f|
- f.write(file.read)
- end
- #返回文件名称,保存到数据库中
- return @filename
- end
- end
- def getFileName(filename)
- if !filename.nil?
- require 'uuidtools'
- filename.sub(/.*./,UUID.random_create.to_s+'.')
- end
- end
- end
在页面中,我们定义一<%=file_field "object","field"%>
- <%=file_field 'book','bgImage'%>
然后在对应的controller中调用即可
- def create
- if request.get?
- @book=Book.new
- else
- @book=Book.new(params[:book])
- @book.bgImage=uploadFile(params[:book]['bgImage'])
- if @book.save
- redirect_to_index
- end
- end
- end