没有activerecord的文件上传

Mik*_*ike 33 ruby-on-rails

如何在轨道上处理文件上传而不将它们附加到活动记录?
我只想将文件写入磁盘.

谢谢,

Ryt*_*ius 56

如果我理解你需要什么,那么最简单的例子是:

控制器:

  class UploadController < ApplicationController
  def new

  end

  def create
    name = params[:upload][:file].original_filename
    path = File.join("public", "images", "upload", name)
    File.open(path, "wb") { |f| f.write(params[:upload][:file].read) }
    flash[:notice] = "File uploaded"
    redirect_to "/upload/new"
  end
end
Run Code Online (Sandbox Code Playgroud)

风景:

<% flash.each do |key, msg| %>
    <%= content_tag :div, msg, :class => [key, " message"], :id => "notice_#{key}" %>
<% end %>
<% form_tag '/upload/create', { :multipart => true } do %>
    <p>
    <%= file_field_tag 'upload[file]' %>
    </p>
    <p>
        <%= submit_tag "Upload" %>
    </p>
<% end %>
Run Code Online (Sandbox Code Playgroud)

这将允许您上传任何文件,而无需任何检查或验证,在我看来,这不是有用的.

如果我自己做,那么我会使用像有效的宝石无表格的宝石,只是无表格不再支持.这些宝石将允许您验证您上传的内容,使其更加清晰.


小智 6

您可以使用 FileUtils 将临时文件移动到目标路径

tmp = params[:my_file_field].tempfile
destiny_file = File.join('public', 'uploads', params[:my_file_field].original_filename)
FileUtils.move tmp.path, destiny_file
Run Code Online (Sandbox Code Playgroud)